Spark任务高并发场景下偶发NameNode服务被强制终止的解决方法
问题现象描述
在针对Spark任务开展并发测试时,当任务提交频率达到1800/h的高并发场景下,系统出现任务堆积现象,在此过程中偶发NameNode服务被强制终止的情况。
关键过程、根本原因分析
- 首先对NameNode的Log日志进行了详细查看,未发现明显异常信息。
- 进一步使用dmesg命令查看系统内核日志,发现NameNode进程是被系统主动终止的,原因是系统内存不足。
经过全面分析整个集群的任务处理流程,发现由于任务提交速度远超任务完成速度,导致在Spark YARN上提交但尚未执行的任务持续堆积。随着堆积任务数量的不断增加,Driver节点所消耗的系统内存急剧上升,最终触发了Linux系统的内存保护机制,系统为避免自身崩溃,选择终止了占用内存较大的NameNode进程。
结论、解决方案及效果
高并发场景下任务提交与完成速度失衡,引发任务堆积,进而导致Driver节点内存耗尽,最终致使NameNode进程被系统杀死。
通过合理调整任务提交策略,降低并发度,确保任务提交速度与集群处理能力相匹配,避免任务过度堆积,可规避该问题。
父主题: 故障排除