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

最近提交一個spark應用以後發現執行很是慢,點開spark web ui以後發現卡在一個job的一個stage上,這個stage有100000個task,可是絕大部分task都分配到兩個executor上,其餘executor很是空閒,what happened?html

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

spark.locality.waitweb

進一步查看目前集羣的部署結構,發現datanode和nodemanager並無部署到一塊,因此spark在分配NODE_LOCAL類型task的時候,只有兩個executor知足條件,因此絕大部分任務都分配到這兩個executor上,經過設置app

spark.locality.wait=0大數據

解決問題;ui

ps:存儲和計算(即datanode和nodemanager)要麼徹底分開獨立部署,要麼徹底部署在一塊兒,不要一部分分開部署,一部分部署在一塊兒,若是必定要這樣,不要開啓數據本地化特性;spa

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息