Hadoop运行WordCount任务报错:找不到或无法加载MRAppMaster主类
嘿,这个Hadoop WordCount的报错我太熟了!你遇到的Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster加上AM容器退出的问题,本质就是YARN启动MapReduce的ApplicationMaster时找不到对应的类,大概率是配置或者依赖路径的问题,给你几个靠谱的排查和解决步骤:
检查并修复环境变量配置
首先确保你的HADOOP_HOME设置正确,并且系统PATH已经包含Hadoop的bin和sbin目录。另外,HADOOP_CLASSPATH必须覆盖到Hadoop核心依赖的jar包,可以在终端执行以下命令临时生效(如果要永久生效,加到~/.bashrc或者/etc/profile里):export HADOOP_HOME=/path/to/your/hadoop export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH export HADOOP_CLASSPATH=$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/yarn/*执行
echo $HADOOP_HOME和echo $HADOOP_CLASSPATH验证变量是否正确设置。修正YARN配置文件(yarn-site.xml)
这个文件在$HADOOP_HOME/etc/hadoop目录下,确保yarn.application.classpath配置包含了所有必要的Hadoop jar包路径,正确配置示例如下:<property> <name>yarn.application.classpath</name> <value>$HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/share/hadoop/common/*,$HADOOP_COMMON_HOME/share/hadoop/common/lib/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,$HADOOP_YARN_HOME/share/hadoop/yarn/*,$HADOOP_YARN_HOME/share/hadoop/yarn/lib/*,$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*,$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value> </property>修改完成后,记得重启YARN服务:
stop-yarn.sh start-yarn.sh检查MapReduce配置(mapred-site.xml)
同样在$HADOOP_HOME/etc/hadoop目录下,确认mapreduce.framework.name设置为yarn(因为你用的是MRv2/YARN模式),配置如下:<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>另外也可以添加
mapreduce.application.classpath配置,和yarn-site.xml里的路径保持一致,进一步确保类路径覆盖完整。验证Hadoop jar包完整性
去$HADOOP_HOME/share/hadoop/mapreduce目录下,检查是否存在hadoop-mapreduce-app-*.jar文件——MRAppMaster类就包含在这个jar包里。如果找不到这个文件,说明你的Hadoop安装包不完整,需要重新下载解压官方完整的安装包。提交任务时手动指定类路径(临时方案)
如果上面的配置都没问题还是报错,可以在提交WordCount任务时,通过-libjars参数手动指定依赖的jar包:hadoop jar your-wordcount.jar WordCount input output -libjars $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-app-*.jar
一般来说,按照上面的步骤排查后,这个报错就能解决啦~
内容的提问来源于stack exchange,提问作者MathieuGug

