事件: datax on yarn 3点出现任务失败,错误信息:[Error] DataX receive unexpected signal 15, starts to suicide。jdk还打印了stack信息。 问题分析: signal15为外部kill,jvm打印thread dump也是由于kill产生,尤其是kill -3会thread dump。 是机器内存不足被OS kill? 到/var/log/messages寻找,无相关日志,机器内存监控显示内存充足。 yarn资源抢占,被yarn rm kill了? 集群使用fair + drf调度策略,并开启了资源抢占。不同的队列之间资源会相互竞争和抢占。定位问题,寻找rm的日志,找到对应container被kill的日志。 添加yarn抢占容器数量监控 Hadoop_ResourceManager_AggregateContainersPreempted{name=”QueueMetrics”,q0=”root”, user=””,instance=”x.x.x.x:7011″} 解决方式: 1、队列划分更精细,资源划分按业务,调整配比 2、关闭资源抢占 原理: FIFO Scheduler、Capacity Scheduler、Fair Scheduler 什么时候发生抢占? Ø 最小资源抢占, 当前queue的资源无法保障时,而又有apps运行,需要向外抢占。Ø 公平调度抢占, 当前queue的资源为达到max,而又有apps运行,需要向外抢占。 具体详见yarn源码实现。 参考: https://cloud.tencent.com/developer/article/1195056 YARN资源调度策略