0

我正在使用 StormCrawler 进行实时抓取。我在 ElasticSearch 中插入 Domain 并且 Crawler 爬行良好,我已经为每个 Domain 定义了爬行 URls 的限制(在SimpleFetcherBolt中使用 Redis )。

场景:当我插入一个域时,StormCrawler 开始爬行。现在在 ElasticSeeds 中输入一个新域,StormCrawler 不会立即获取它。

它正忙于获取先前域的页面。如果限制很高(比如 1000 个 URL),则至少需要 20 分钟才能开始在新插入的域上进行爬网。

我想要即时结果,是否可以在新域上设置任何优先级?或 StormCrawler 开始在新域上爬行 每当插入新域时?每个域的不同队列(DB)?

任何建议,将不胜感激。

4

1 回答 1

1

我已经为每个域定义了抓取 URls 的限制(在 SimpleFetcherBolt 中使用 Redis)

你能解释一下你的意思吗?您不必修改 Fetcher 螺栓,这就是 URL 过滤器的用途。

你用的是什么类型的喷口?聚合喷口?您使用了多少个 SimpleFetcherBolt 实例?

SC 应该很快开始在新域上爬行。请相应地设置日志级别并检查日志以查看 spout 是否为新域发出了元组以及 URL 是否被进一步阻止。

编辑:要么指定多个 SimpleFetcherBolt 实例,要么改用 FetcherBolt。对于 SFB 的单个实例,URL 将停留在队列中,而 FetcherBolt 将并行处理它们。

通过限制,我的意思是 SC 仅在它停止获取之后获取一个域的有限 URL。假设限制为 100,SC 将获取每个域的 100 个 URL

也许将其作为一个单独的 URL 过滤器,这将比破解 fetcher 类更干净,它也应该更有效。

SC 默认使用 Agg.Spout 对

否,请参阅ESCrawlTopology

于 2017-01-04T13:11:10.477 回答