1. spark提交后一直循环accepted
spark on yarn提交任务时一直显示ACCEPTED,过一个小时后就会出现任务失败,但在提交时shell终端显示的日志并没有报错,logs文件夹中也没有日志产生。注:spark on yarn是不需要启动spark集群的,只需要在提交任务的机器配置spark就可以了,因为任务是由hadoop来执行的,spark只负责任务的提交。
参考网址
遇到此种情况
a. 首先检查All application的YARN页面
看running application是否是该application,如果不是的话,使用yarn application -kill "applicationID"
把之前的application kill掉。
b. 检查ResourceManager日志
检查ResourceManager日志,位于[HADOOP_HOME]/logs/yarn-ubuntu-resourcemanager-master.log中,若发现nodemanager并未分配到资源
参考网址
修改每台NodeManager上的yarn-site.xml:
修改
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle,spark_shuffle</value>
</property>
增加
<property>
<name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
<value>org.apache.spark.network.yarn.YarnShuffleService</value>
</property>
<property>
<name>spark.shuffle.service.port</name>
<value>7337</value>
</property>
将$SPARK_HOME/lib/spark-1.6.0-yarn-shuffle.jar拷贝到每台NodeManager的${HADOOP_HOME}/share/hadoop/yarn/lib/下。
重启所有NodeManagers。
2.slave处于unhealthy状态
观察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下添加如下:
<property> <name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name> <value>98.5</value> </property>
因为当没有磁盘空间,或因为权限问题,会导致作业失败,所以不要禁用磁盘检查。更详细的信息可以参考https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/NodeManager.html#Disk_Checker
3. Yarn的一些默认设置
4. HDFS block丢失过多进入安全模式(safe mode)
内存不足等原因导致dataNode丢失超过设置的丢失百分比,系统自动进入安全模式
解决办法:
在master执行如下命令:
步骤 1 执行命令退出安全模式:hadoop dfsadmin -safemode leave
步骤 2 执行健康检查,删除损坏掉的block。 hdfs fsck / -delete
注意: 这种方式会出现数据丢失,损坏的block会被删掉