2
在foreachPartitions/mapPartitions的呼叫,有兩種可能的分配策略:分區是否預先分配給執行程序或動態分配?
- 預分配的所有分區,以不同的執行者,也就是說,如果我有1000個分區和10個執行者,則每個執行恰好獲得100個分區。
- 只要執行程序準備就緒,就爲其分配一個新的分區,即如果某些分區運行緩慢,則執行程序可能會獲得更少的分區,而其他分區則會獲得更多分區。
spark實際使用哪種策略?
在foreachPartitions/mapPartitions的呼叫,有兩種可能的分配策略:分區是否預先分配給執行程序或動態分配?
spark實際使用哪種策略?
這個問題沒有簡單的答案。遺囑執行人的精確分配依賴於集羣管理器(獨立,紗,Mesos和更多的驚喜)和配置選項的數量,這方法並不適用於所有的經理的一些:
spark.deploy.spreadOut
- 無論是循環或合併到最小數量的節點。spark.dynamicAllocation.enabled
- 根據工作負載啓用分配。spark.speculation
- 啓用緩慢任務的推測性執行。這可以進一步受到數據局部性(進一步受spark.locality.wait
)和運行時事件(故障,超時)和應用特定參數(如優選的位置)和DAG /執行計劃(在某些情況下火花會優先分區的共同定位)。