使用ElasticSearch并行处理在StormCrawler中插入的新域/ URL

时间:2017-01-04 11:39:09

标签: web-crawler stormcrawler

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

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

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

我想立即获得结果,是否可以在新域上设置优先级?或者StormCrawler开始在新域上抓取每当插入新域时?每个域的队列(DB)不同?

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

  

我已为每个域定义了爬网的限制(使用Redis   在SimpleFetcherBolt中)

你可以解释一下你的意思吗?您不应该修改Fetcher bolt,这是什么URL过滤器。

你使用什么类型的喷口? AggregationSpouts?您使用了多少SimpleFetcherBolt实例?

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

编辑:指定多个SimpleFetcherBolt实例或改为使用FetcherBolt。使用单个SFB实例,URL将被卡在队列中,而FetcherBolt将并行处理它们。

  

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

也许这样做是一个单独的URL过滤器,这比黑客攻击类更干净,它也应该更有效。

  

SC默认使用Agg.Spout

不,请参阅ESCrawlTopology