Spark on yarn遇到的问题

2026年09月24日 02:24
有1个网友回答
网友(1):

spark on yarn提交任务时一直显示ACCEPTED,过一个小时后就会出现任务失败,但在提交时shell终端显示的日志并没有报错,logs文件夹中也没有日志产生。注:spark on yarn是不需要启动spark集群的,只需要在提交任务的机器配置spark就可以了,因为任务是由hadoop来执行的,spark只负责任务的提交。
参考网址
遇到此种情况

看running application是否是该application,如果不是的话,使用 yarn application -kill "applicationID" 把之前的application kill掉。

检查ResourceManager日志,位于[HADOOP_HOME]/logs/yarn-ubuntu-resourcemanager-master.log中,若发现nodemanager并未分配到资源
参考网址
修改每台NodeManager上的yarn-site.xml:
修改

yarn.nodemanager.aux-services
mapreduce_shuffle,spark_shuffle

增加

yarn.nodemanager.aux-services.spark_shuffle.class
org.apache.spark.network.yarn.YarnShuffleService


spark.shuffle.service.port
7337

将$SPARK_HOME/lib/spark-1.6.0-yarn-shuffle.jar拷贝到每台NodeManager的${HADOOP_HOME}/share/hadoop/yarn/lib/下。
重启所有NodeManagers。

观察All Application的yarn界面发现有一个slave提示“unhealthy”状态。NodeHealthReport报告如下:
1/1 local-dirs are bad: /tmp/hadoop-hduser/nm-local-dir; 1/1 log-dirs are bad: /usr/local/hadoop/logs/userlogs
测试过程中YARN Node变成Unhealthy了,后来定位到硬盘空间不够。通过查找大于100M的文件时发现有N多个spark-assembly-1.6.0-SNAPSHOT-hadoop2.6.0-cdh5.3.1.jar包,大小为170多M,
每提交一个application到yarn上执行,就会上传一个assembly包,application个数一多,磁盘就占用了N多空间。
解决方案:
引起local-dirs are bad的最常见原因是由于节点上的磁盘使用率超出了max-disk-utilization-per-disk-percentage(默认值90.0%)。
清理不健康节点上的磁盘空间或者降低参数设置的阈值:
直接在yarn-site.xml下添加如下:
yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage 98.5
因为当没有磁盘空间,或因为权限问题,会导致作业失败,所以不要禁用磁盘检查。更详细的信息可以参考 https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/NodeManager.html#Disk_Checker

yarn-default.xml

内存不足等原因导致dataNode丢失超过设置的丢失百分比,系统自动进入安全模式
解决办法:
在master执行如下命令:
步骤 1 执行命令退出安全模式:hadoop dfsadmin -safemode leave
步骤 2 执行健康检查,删除损坏掉的block。 hdfs fsck / -delete

注意: 这种方式会出现数据丢失,损坏的block会被删掉