Hadoop MapReduce应用执行报错:java.lang.ClassNotFoundException(RainfallAnalyzer)
解决Hadoop MapReduce ClassNotFoundException问题
可能的原因及修复方案
1. Jar包未包含目标主类文件
- 先检查jar包内是否存在
RainfallAnalyzer.class,执行命令:jar tf RainfallAnalyzer.jar | grep RainfallAnalyzer.class - 若无输出,说明打包时遗漏了class文件,重新打包:
假设class文件存放在bin/目录下,执行:
参数说明:jar cvfe RainfallAnalyzer.jar RainfallAnalyzer -C bin/ .-e指定主类名称,-C切换到目标目录打包所有内容
2. 主类全限定类名错误
- 如果你的主类属于某个包(比如
com.rainfall),运行命令必须使用全限定类名:hadoop jar RainfallAnalyzer.jar com.rainfall.RainfallAnalyzer {Input Directory} {Output Directory} - 核对代码顶部的
package声明,确保类名与包名对应
3. Jar包MANIFEST.MF未指定主类
- 查看jar包内的
META-INF/MANIFEST.MF文件,确认是否存在Main-Class条目:jar xf RainfallAnalyzer.jar META-INF/MANIFEST.MF cat META-INF/MANIFEST.MF - 若缺失该条目,重新打包时添加
-e参数指定主类(参考步骤1的命令),或手动编辑MANIFEST.MF后重新打包:
在MANIFEST.MF中添加:
注意文件末尾需留空行,然后执行:Main-Class: RainfallAnalyzerjar cmf MANIFEST.MF RainfallAnalyzer.jar bin/*.class
4. Hadoop类路径配置问题
- 运行时显式指定类路径:
hadoop jar RainfallAnalyzer.jar -cp RainfallAnalyzer.jar RainfallAnalyzer {Input Directory} {Output Directory} - 或检查并更新
HADOOP_CLASSPATH环境变量,确保包含当前目录:echo $HADOOP_CLASSPATH export HADOOP_CLASSPATH=.:$HADOOP_CLASSPATH
内容的提问来源于stack exchange,提问作者Bharath Raj
相关产品推荐
相关产品推荐

