【原創】大叔問題定位分享(19)spark task在executors上分布不均


最近提交一個spark應用之后發現執行非常慢,點開spark web ui之后發現卡在一個job的一個stage上,這個stage有100000個task,但是絕大部分task都分配到兩個executor上,其他executor非常空閑,what happened?

查看spark task分配邏輯發現,有一個data locality即數據本地性的特性,詳見 https://www.cnblogs.com/barneywill/p/10152497.html
即會按照locality級別的優先級來分配任務,數據本地性的優先級是:PROCESS_LOCAL, NODE_LOCAL, NO_PREF, RACK_LOCAL, ANY,並且在優先級之間還有一個delay,

spark.locality.wait

進一步查看目前集群的部署結構,發現datanode和nodemanager並沒有部署到一塊,所以spark在分配NODE_LOCAL類型task的時候,只有兩個executor滿足條件,所以絕大部分任務都分配到這兩個executor上,通過設置

spark.locality.wait=0

解決問題;

ps:存儲和計算(即datanode和nodemanager)要么完全分開獨立部署,要么完全部署在一起,不要一部分分開部署,一部分部署在一起,如果一定要這樣,不要開啟數據本地化特性;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM