问题引入
明明自己集群资源充足,YARN还是会将Spark的executor集中分派到个别的NodeManager?
解决方案
将YARN配置中的yarn.scheduler.fair.assignmultiple
参数设为false;
或者手动设定yarn.scheduler.fair.max.assign
参数的值为一个较小的正数(如3或4)。
方案说明
-
如果assignMultiple(对应
yarn.scheduler.fair.assignmultiple
参数)为true,那么在成功分配一个Container后不会停止,继续尝试在当前节点上分配; -
在上一条的条件下,最多会连续分配maxAssign(对应
yarn.scheduler.fair.max.assign
参数)个Container后停止。
Hadoop默认的yarn.scheduler.fair.assignmultiple
为false,亦即一次调度只分配一个Container。但是CDH将这个参数默认设为了true,并且yarn.scheduler.fair.max.assign
默认为-1,表示不限制,所以会导致一次调度在单个节点上分配较多的Container。1