2016-06-09 85 views
0

我正在運行一個Spark應用程序,每個執行程序有5個執行程序的5個執行程序。 但是,我注意到只有一個執行者完成大部分工作(即大部分任務都在那裏完成)。我正在運行的作業高度平行(20個分區或更大)。你如何解釋這種行爲?Spark:執行程序的最佳使用

即使我減少了每個執行程序的核心數量,結果也只是同時在該單個執行程序上運行更少的任務。 我應該限制每個執行程序的內存,以便使用更多的執行程序(以防萬一整個數據適合單個執行程序)?

+0

它取決於您正在處理的轉換和數據集。例如,如果您的數據是(1,2),(2,2),(1,3),(1,9)(1,10),並且您執行了reduceByKey,則您的所有數據使用鍵'1'遺囑執行人。 – Knight71

+0

簡單的轉換和動作像df.map(lambda x:x).count()似乎在同一個執行器上運行。所以,沒有真正涉及的關鍵。 –

+0

一點點的代碼片段和示例數據可能會有所幫助。 – Knight71

回答

0

只是爲了增加我的兩分錢,爲未來面對這個問題的人。這種問題通常是由於RDD/Dataframe的偏斜分區大小造成的。爲了調試問題,您可以檢查RDD的分區大小,以確定是否存在異常值。如果有的話,你可以看到那個大分區中的元素,以瞭解發生了什麼。

類似問題在this stackoverflow question中有詳細說明。

相關問題