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