2017-09-04 18 views
2

在foreachPartitions/mapPartitions的呼叫,有兩種可能的分配策略:分區是否預先分配給執行程序或動態分配?

  1. 預分配的所有分區,以不同的執行者,也就是說,如果我有1000個分區和10個執行者,則每個執行恰好獲得100個分區。
  2. 只要執行程序準備就緒,就爲其分配一個新的分區,即如果某些分區運行緩慢,則執行程序可能會獲得更少的分區,而其他分區則會獲得更多分區。

spark實際使用哪種策略?

回答

0

這個問題沒有簡單的答案。遺囑執行人的精確分配依賴於集羣管理器(獨立,紗,Mesos和更多的驚喜)和配置選項的數量,這方法並不適用於所有的經理的一些:

  • spark.deploy.spreadOut - 無論是循環或合併到最小數量的節點。
  • spark.dynamicAllocation.enabled - 根據工作負載啓用分配。
  • spark.speculation - 啓用緩慢任務的推測性執行。

這可以進一步受到數據局部性(進一步受spark.locality.wait)和運行時事件(故障,超時)和應用特定參數(如優選的位置)和DAG /執行計劃(在某些情況下火花會優先分區的共同定位)。