2016-09-06 148 views
3

我們有一個spark 1.6.1應用程序,它從兩個kafka主題獲取輸入並將結果寫入另一個kafka主題。應用程序在第一個輸入主題中收到一些大的(大約1MB)文件,並從第二個輸入主題中收到一些簡單的條件。如果條件滿足,則將文件寫入輸出其他狀態的主題(我們使用mapWithState)。如何調整「spark.rpc.askTimeout」?

對於輸入文件的數量較少(幾百),邏輯工作正常,但與org.apache.spark.rpc.RpcTimeoutException失敗,建議增加spark.rpc.askTimeout。從默認值(120s)增加到300s後,運行時間變長,但在1小時後出現相同的錯誤。將該值更改爲500秒後,該作業正常運行超過2小時。

注意:我們在本地模式下運行spark工作,並且kafka也在本機上運行。此外,有一段時間我看到警告"[2016-09-06 17:36:05,491] [WARN] - [org.apache.spark.storage.MemoryStore] - Not enough space to cache rdd_2123_0 in memory! (computed 2.6 GB so far)"

現在,300s似乎足夠大的超時考慮所有本地配置。但任何想法,如何達到一個理想的超時值,而不是僅僅使用500s或更高的基礎上測試,因爲我看到墜毀案件使用800和案件建議使用60000s?

+0

我有同樣的問題,你找到一個解決方案?謝謝 – phcaze

+1

我們面臨的主要問題是物體的大小。即使在一天超時之後,超時仍然打響!由於大量的大物體。我們改變了我們的設計以檢索有限的有用信息子集,並將對象的大小保持在較小的狀態。 – rakesh

回答

2

我遇到了同樣的問題,我發現page表示在繁重的工作負載下,將spark.network.timeout(它控制所有超時,也是RPC的)設置爲800是明智的。此刻它解決了我的問題。