2017-02-16 39 views

回答

1
  • 正如您所提到的,您至少需要有1個任務/內核才能使用所有集羣的資源。
  • 根據每個階段/任務所需的處理類型,您可能會遇到處理/數據歪斜 - 可以通過使分區更小/更多分區來以某種方式緩解,以便更好地利用集羣(例如,當執行程序運行時間更長任務需要5分鐘,其他執行者可以運行10個30秒的較短任務)。
  • 可能還有其他您想要增加分區數量的場景(例如,如果您遇到大小/內存限制)。

    退房有關並行調整這個漂亮的文章:http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/

更新: 這怎麼可以處理幫助/數據偏差,給你一個更好的集羣利用率和更快的作業執行(示例屏幕截圖以下是Spark UI中您可以看到任務之間的偏差 - 請參閱diff中值與最大任務持續時間):

假設您有一個可以並行運行2個任務的集羣。

  • 使用1個任務(1個空閒核心)處理數據需要60分鐘 - 工作需要60米。
  • 如果你將它分成兩部分,你可能會發現因爲歪斜:任務1:45米,任務2:15米。工作需要45米(30米你有1空閒核心)。
  • 如果將其分成4份,您可能會得到:任務1:30米,任務2:10米,任務3:10米,任務4:10米。作業需要30米(第一個核心運行1個任務30米,另一個運行其他3個10米的小任務)。 等

Skew: Max vs Median

+0

只是爲了確保我的理解有關數據點傾斜:如果我有比其他分區更大的數據集分區,這將是更有效地打破成較小的分區所以其他執行者和任務可以並行處理它,而不是等待大分區由一個任務處理。我對你有正確的理解嗎? – Glide

+0

是的。添加了對原始答案的更新。 – Traian

+0

感謝您提供如此詳細的回覆。 – Glide

相關問題