spark on yarn container分配极端倾斜

环境:CDH5.13.3  spark2.3

在提交任务之后,发现executor运行少量几台nodemanager,而其他nodemanager没有executor分配。

通过spark-shell模拟如下:

第一次尝试分配6个exeutor,具体如下

spark2-shell --driver-memory 1G --executor-memory 2G --num-executors 6 --executor-cores 3

spark on yarn container分配极端倾斜

第二次尝试分配20个executor,具体如下

spark2-shell --driver-memory 1G --executor-memory 2G --num-executors 20 --executor-cores 3

spark on yarn container分配极端倾斜

环境调度策略为公平调度,即FairScheduler,而这种情况是由公平调度中的一个参数有关:

<property>
<name>yarn.scheduler.fair.assignmultiple</name>
<value>true</value>
<discription>whether to allow multiple container assignments in one heratbeat defaults to false</discription>
</property>
在一次心跳请求中,是否分配多个container,CDH5.13.3默认设置为true。原生hadoop默认是false

<property>
<name>yarn.scheduler.fair.max.assign</name>
<value>-1</value>
</property>
如果上面设置的允许一次分配多个container,那么最多分配多少个,默认无限制。根据实际资源情况


将yarn.scheduler.fair.assignmultiple设置为false,再测试如下:

spark2-shell --driver-memory 1G --executor-memory 2G --num-executors 6 --executor-cores 3

spark on yarn container分配极端倾斜

如果在生产环境下,spark任务的executor数量和内存都相对要高很多,所以这种情况会相对有所缓解,具体根据实际情况确定是否需要调整。

相关推荐