【问题标题】:Enabling StormCrawler to crawl a single domain with more than one spout使 StormCrawler 能够爬取具有多个 spout 的单个域
【发布时间】:2018-08-17 16:12:30
【问题描述】:

我正在使用 StormCrawler 和 Elasticsearch 进行概念验证,以仅抓取单个域、几个主机 - 一个包含许多页面。有没有办法告诉stormcrawler不要将主机或域的所有url分组在一个spout中?

我按照 Youtube 教程进行设置,并将 spout 设置为 10 个并行度,但据我所知,风暴 UI 仅使用 1 个。我如何让它传播单个 url域,甚至是所有 spout 上的单个主机?

谢谢! 吉姆

【问题讨论】:

    标签: web-crawler stormcrawler


    【解决方案1】:

    要对每个主机的 URL 进行分区,您的配置应该有 partition.url.mode: "byHost" 这是默认值。这会将属于不同主机的 URL 放入不同的分片中,并且将使用更多的 spout 实例。

    来自同一主机的 URL 被放在相同的分片中以强制执行礼貌。如果您想从主机并行获取,您可以简单地将 fetcher.threads.per.queue 设置为您想要的任何值。如果该网站是您自己的,这是可以接受的,但如果它属于其他人,这显然是不礼貌的。即使您继续按主机分片,这也能正常工作。

    当然,您可以通过将 es.status.routing 设置为 false 来完全禁用路由。无论主机名如何,ES 都会对 URL 进行分片,并且将使用所有分片和 spout。然而,这意味着对礼貌没有严格的控制。

    【讨论】:

    • 感谢您的帮助!由于我们正在索引我们自己的内部服务器,因此上述一切都可以,因为我也在与我们的内部网络人员就硬件和网络连接进行协调。我还注意到我们还可以通过将弹性搜索索引“刷新”时间从 5 秒减少到 250 毫秒来加快获取时间。有可能在我们的几台服务器上降低爬取的“礼貌”以提高爬取速度,我正在寻找一个平衡点……由于爬取是内部的,elasticsearch 中索引刷新时间的影响是什么?跨度>
    • 减少 ES 刷新时间不会影响 fetch 时间本身,但意味着 spout 能够更快地获得更新的结果。但它会影响索引性能。正如你所指出的,这是一个平衡问题。通过尝试不同的值,您应该能够找到适合您的方法。
    • 太棒了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多