【原创】大叔问题定位分享(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

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息