我目前正在工作的风暴爬虫为基础的项目。我们有一个固定的和有限的带宽从网上获取网页。对于拓扑中的不同螺栓,我们有8个worker具有较大的并行性提示值(即50)。所以创建了很多线程来获取页面。在项目中,fetch\u错误数的增加和parallelism\u提示数的增加有关系吗?如何确定storm crawler中u提示的正确值?
pgccezyw1#
并行性提示不应不加区别地应用于所有螺栓。理想情况下,每个worker需要一个fetcherbolt示例,因此在您的示例中是8。正如您可能在wiki或conf中看到的,fetcherbolt处理用于获取的内部线程。这是由配置fetcher.threads.number决定的,在原型的配置中设置为50(假设这是您使用的起点)。使用太多的fetcherbolt示例会适得其反。最好改为fetcher.threads.number的值。如果您有50个默认线程数为50的fetcher示例,那么将得到2500个fetch线程,这对于可用带宽来说可能太多了。正如我之前提到的,您希望每个worker有一个fetcherbolt,每个bolt的内部获取线程数取决于您的带宽。这没有硬性规定,这取决于你的情况。然而,我观察到的一个常量是解析螺栓与获取螺栓的比率;通常,每个抓取程序有4个解析器可以正常工作。在部署模式下运行storm并检查ui中解析器螺栓的容量值。如果该值为1或更高,请尝试使用更多示例,并查看它是否影响容量。在任何情况下,并非所有螺栓都需要相同的平行度。
1条答案
按热度按时间pgccezyw1#
并行性提示不应不加区别地应用于所有螺栓。
理想情况下,每个worker需要一个fetcherbolt示例,因此在您的示例中是8。正如您可能在wiki或conf中看到的,fetcherbolt处理用于获取的内部线程。这是由配置fetcher.threads.number决定的,在原型的配置中设置为50(假设这是您使用的起点)。
使用太多的fetcherbolt示例会适得其反。最好改为fetcher.threads.number的值。如果您有50个默认线程数为50的fetcher示例,那么将得到2500个fetch线程,这对于可用带宽来说可能太多了。
正如我之前提到的,您希望每个worker有一个fetcherbolt,每个bolt的内部获取线程数取决于您的带宽。这没有硬性规定,这取决于你的情况。
然而,我观察到的一个常量是解析螺栓与获取螺栓的比率;通常,每个抓取程序有4个解析器可以正常工作。在部署模式下运行storm并检查ui中解析器螺栓的容量值。如果该值为1或更高,请尝试使用更多示例,并查看它是否影响容量。
在任何情况下,并非所有螺栓都需要相同的平行度。