背景:
在部署完本地hadoop后,执行示例MapReduce程序wordcount时,一直卡主在INFO mapreduce.Job: map 0% reduce 0%,等待N久也没有反应。
解决过程
从yarn的web界面可以看到当前的任务进度有5%,但是一直不会更新
查看了一下nodemanager日志(hadoop目录的logs文件下),发现一直有打印着
2020-05-01 20:15:53,885 INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: ResourceCalculatorPlugin is unavailable on this system. org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl is disabled.
查询这个报错说是因为yarn-site.xml配置出错,解决方法为:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
修改改为:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce.shuffle</value>
</property>
按上述修改之后重新执行示例,发现还是卡住,而且这次是卡在
INFO mapreduce.Job: Running job: job_1588335870581_0001
再次看了一下nodemanager日志,发现在yarn启动是已经报错了。报错信息为:
mapreduce.shuffle set in yarn.nodemanager.aux-services is invalid.The valid service name should only contain a-zA-Z0-9_ and can not start with numbers
这个报错是因为刚才修改yarn.site.xml导致的,yarn.nodemanager.aux-services的值在高版本的Hadoop中只能包含a-zA-Z0-9_,所以刚才修yarn.nodemanager.aux-services的值为mapreduce.shuffle是不行,无可奈何只好改回去,也就是回到上面的第一个问题。
继续查找了很多的资料,还是没有找都解决的方法,后面想了一下,是不是其他地方地方有错导致的,所以继续查看了其他的几个日志,在resourcemanager日志中发现了一个报错
ERROR org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppImpl: App: application_1588336718534_0001 can't handle this event at current state org.apache.hadoop.yarn.state.InvalidStateTransitionException: Invalid event: APP_UPDATE_SAVED at ACCEPTED
查询了一下资料后,有说这个问题是由于yarn默认设置的内存比较大,但是虚拟机内存没那么大,所以要调整内存大小,在yarn-site.xml文件添加一下配置:
<property>
<name>yarn.app.mapreduce.am.resource.mb</name>
<value>256</value>
</property>
重新启动后又出现另一个报错Name node is in safe mode.,心好累!!这是由于强制退出hadoop进程导致的,只需要执行一下hadoop dfsadmin -safemode leave即可
再一次执行示例jar /Library/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output,终于梳理通过。
实属不易,顺便把这个问题的处理过程给记录一下,以方便后面查阅。