You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行WordCount命令时出现NoClassDefFoundError错误求助

执行Hadoop WordCount任务时遇到的类缺失错误排查与解决

问题概述

执行WordCount任务时Job直接失败,核心报错为java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/util/Clock,导致MRAppMaster无法初始化,最终任务终止。

完整报错信息

2023-10-06 15:55:35,005 INFO mapreduce.Job: Job job_1696606856991_0001 running in uber mode: false 2023-10-06 15:55:35,006 INFO mapreduce.Job: map 0% reduce 0%
2023-10-06 15:55:35,027 INFO mapreduce.Job: Job job_1696606856991_0001 failed with state FAILED due to: Application application_1696606856991_0001 failed 2 times due to AM Container for appattempt_169 6606856991_0001_000002 exited with exitCode: 1
Failing this attempt.Diagnostics: [2023-10-06 15:55:34.304] Exception from container-launch. Container id: container_1696606856991_0001_02_000001
Exit code: 1
[2023-10-06 15:55:34.311] Container exited with a non-zero exit code 1. Error file: prelaunch.err. Last 4096 bytes of prelaunch.err :
Last 4096 bytes of stderr :
Error: Unable to initialize main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster
Caused by: java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/util/Clock
[2023-10-06 15:55:34.311] Container exited with a non-zero exit code 1. Error file: prelaunch.err. Last 4096 bytes of prelaunch.err :
Last 4096 bytes of stderr :
Error: Unable to initialize main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster
Caused by: java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/util/Clock
For more detailed output, check the application tracking page: http://baoanh-master: 9004/cluster/app /application_1696606856991_0001 Then click on links to logs of each attempt.
. Failing the application.
2023-10-06 15:55:35,052 INFO mapreduce.Job: Counters: 0
input file1.txt:
Hello World
input file2.txt: Hello Hadoop
wordcount output:
cat: output1/part-r-00000': No such file or directory

相关配置与脚本

yarn-site.xml

<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARNHOME,HADOOP_MAPRED_HOME</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>baoanh-master:9002</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>baoanh-master:9003</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>baoanh-master:9004</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>baoanh-master:9005</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>baoanh-master:9006</value>
</property>
</configuration>

mapred-site.xml

<configuration>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property> 
<property>
<name>mapreduce.jobtracker.address</name>
<value>baoanh-master:9001</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoopbaoanh/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoopbaoanh/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoopbaoanh/hadoop</value>
</property>
</configuration>

test.sh

#!/bin/bash
# test the hadoop cluster by running wordcount
# create input files
mkdir input
echo "Hello World" > input/file1.txt
echo "Hello Hadoop" > input/file2.txt
# create input directory on HDFS
hadoop fs -mkdir -p input1
# put input files to HDFS
hdfs dfs -put ./input/* input1
# run wordcount
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-3.3.6-sources.jar org.apache.hadoop.examples.WordCount input1 output1
# print the input files
echo -e "
input file1.txt:"
hdfs dfs -cat input1/file1.txt
echo -e "
input file2.txt:"
hdfs dfs -cat input1/file2.txt
# print the output of wordcount
echo -e "
wordcount output:"
hdfs dfs -cat output1/part-r-00000

问题排查与解决步骤

1. 完善MapReduce应用类路径配置

报错中org/apache/hadoop/yarn/util/Clock属于YARN组件依赖类,当前mapreduce.application.classpath仅包含MapReduce相关jar包,缺少YARN依赖。修改mapred-site.xml中的该配置项:

<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_YARN_HOME/share/hadoop/yarn/*:$HADOOP_YARN_HOME/share/hadoop/yarn/lib/*:$HADOOP_COMMON_HOME/share/hadoop/common/*:$HADOOP_COMMON_HOME/share/hadoop/common/lib/*</value>
</property>

2. 修正环境变量拼写错误

yarn-site.xml中yarn.nodemanager.env-whitelist里的HADOOP_YARNHOME拼写错误,应为HADOOP_YARN_HOME,修正后:

<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>

3. 使用正确的WordCount执行jar包

当前脚本使用的是源码jar包(hadoop-mapreduce-examples-3.3.6-sources.jar),需替换为编译好的可执行jar包,修改test.sh中的执行命令:

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar org.apache.hadoop.examples.WordCount input1 output1

4. 重启Hadoop服务

修改配置后,重启YARN和HDFS服务确保配置生效:

stop-yarn.sh
stop-dfs.sh
start-dfs.sh
start-yarn.sh

5. 清理旧数据重新执行

清理HDFS上的旧输出目录避免冲突:

hdfs dfs -rm -r output1

之后重新运行test.sh脚本即可。

内容的提问来源于stack exchange,提问作者Vũ Phan Bảo Anh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:35:57