2017-08-15 65 views
0

我有一个完全专用于基于Storm-Crawler的履带的节点。我有20个双核CPU,130 Gb的RAM和10Gb/s以太网连接。调整Storm-Crawler以充分利用可用资源

我将我的拓扑缩小为:CollapsingSpout - > URLPartitionerBolt - > FetcherBolt。喷口正在从Elasticsearch索引(大约50 M记录)读取。 Elasticsearch配置有30 GB RAM和2个碎片。

我使用一个单独的工作人员,大约50 GB专用于JVM的RAM。 使用不同的设置(总线程数,每个队列的线程数量,最大待定喷口,一些与Elasticsearch相关的部分,如桶数和桶大小主要)我可以达到100 MB/s的总体获取速度。然而,看看神经节报告,它只对应我可用带宽的10%。请注意,CPU使用率约为20%,RAM不是问题。

我在寻求一些关于如何调整/调整我的抓取工具以充分利用可用资源的瓶颈和建议的提示。

在此先感谢。

艾蒂安

+0

嗨艾蒂安。你有多少个网站在爬行?见http://stormcrawler.net/faq/#howfast –

+0

嗨Julien。我不知道我要爬行多少个网站。我正在使用源自先前递归爬网的50 M个URL。而对于调整我已经删除了所有的睡眠时间。经过一些测试后,我可以达到200 MB/s的网络使用率,但总体而言,我仍然只使用机器资源的20%。 – EJO

回答

0

你可以使用Kibana或Grafana形象化由StormCrawler产生的指标,看tutorial。这会给你一些关于性能的见解。另外,Storm UI会告诉你组件级别的瓶颈。

您可以使用超过2个分片作为状态索引并具有相应数量的喷口实例。这会增加并行性。

您是否关注网页的链接或索引的大小是否保持不变? 50M的网址并不是很多,所以我不认为ES会超级忙。

您是否尝试过使用AggregationSpout? CollapsingSpout是相当新的+它可能更好地使用它的桶大小为1,因为我认为它为每个桶发出单独的查询。

如果没有看到拓扑结构,很难确切地知道问题出在哪里。尝试使用上述方法找到任何明显的罪魁祸首。

0

Julien,非常感谢您的反馈。我将我的喷口改为AggregationSpout并将仪表板导入Kibana。

我用aggregationSpout-> partitioner-> dummyIndexer-> statusUpdater进行了测试,以确认我的喷口能够根据需要发射,并且没问题(大概为0.3 M元组/分钟,基本上是我的两倍针对我的整个拓扑10 M元组/小时)。

虽然我仍然不满意取材的表现。从活动线程数量大量波动,队列数量和队列大小的角度来看,它非常不稳定。而且我有这样的感觉,当我增加太多的线程数量(几千)时,获取器以某种方式失去抓握。

根据您的经验,每个读取器实例允许的最大线程数是多少?并且由于每个工作人员只需要一个提取器实例,您是否发现有几个工作人员需要并发提取器?

+0

任何运气与下面的建议? –

+0

嗨Julien。事实上,我们的瓶颈可能在我们的节点所在集群的中央DNS服务器上。很明显,爬虫对DNS服务器施加了太多的压力,并且作为一种预防措施,他们丢弃了DNS数据包。 – EJO

+0

在这方面,有没有办法绕过Storm-crawler中的默认DNS服务器? – EJO