使 StormCrawler 能够爬取具有多个 spout 的单个域
Enabling StormCrawler to crawl a single domain with more than one spout
我正在使用 StormCrawler 和 Elasticsearch 进行概念验证,以仅使用几个主机抓取单个域 - 一个具有许多页面。有没有办法告诉 stormcrawler 不要将主机或域的所有 url 分组在一个 spout 中?
我按照 Youtube 教程进行了设置,并将 spout 设置为 10 个并行度,但据我所知,通过风暴 UI 它只使用了 1 个。我该怎么做将单个域甚至单个主机的 url 分布在所有 spouts 上?
谢谢!
吉姆
要按主机划分 URL,您的配置应具有 partition.url.mode: "byHost",这是默认值。这会将属于不同主机的 URL 放入不同的分片中,并且将使用更多的 spout 实例。
来自同一个主机的 URL 被放在同一个分片中以加强礼貌。如果你想从主机并行获取,你可以简单地将 fetcher.threads.per.queue 设置为你想要的任何值。如果该网站是您自己的,这是可以接受的,但如果它属于其他人,则显然是不礼貌的。即使您保持按主机分片,这也能正常工作。
当然,您可以通过将 es.status.routing 设置为 false 来完全禁用路由。无论主机名如何,ES 都会对 URL 进行分片,并且将使用所有分片和喷口。然而,这意味着对礼貌没有严格的控制。
我正在使用 StormCrawler 和 Elasticsearch 进行概念验证,以仅使用几个主机抓取单个域 - 一个具有许多页面。有没有办法告诉 stormcrawler 不要将主机或域的所有 url 分组在一个 spout 中?
我按照 Youtube 教程进行了设置,并将 spout 设置为 10 个并行度,但据我所知,通过风暴 UI 它只使用了 1 个。我该怎么做将单个域甚至单个主机的 url 分布在所有 spouts 上?
谢谢! 吉姆
要按主机划分 URL,您的配置应具有 partition.url.mode: "byHost",这是默认值。这会将属于不同主机的 URL 放入不同的分片中,并且将使用更多的 spout 实例。
来自同一个主机的 URL 被放在同一个分片中以加强礼貌。如果你想从主机并行获取,你可以简单地将 fetcher.threads.per.queue 设置为你想要的任何值。如果该网站是您自己的,这是可以接受的,但如果它属于其他人,则显然是不礼貌的。即使您保持按主机分片,这也能正常工作。
当然,您可以通过将 es.status.routing 设置为 false 来完全禁用路由。无论主机名如何,ES 都会对 URL 进行分片,并且将使用所有分片和喷口。然而,这意味着对礼貌没有严格的控制。