Hadoop运行WordCount时遇java.lang.ClassNotFoundException问题求助
解决Hadoop WordCount的ClassNotFoundException问题
哇,折腾4小时排查这个ClassNotFoundException确实够闹心的,我帮你揪出问题所在!
核心问题分析
你的WordCount类声明了包名package com.cloud.hw03;,但你当前的编译、打包和运行步骤完全没处理这个包结构——Hadoop会根据包名去对应的目录层级找类文件,而你之前打包的jar里根本没有正确的包路径,自然找不到目标类(准确说,是找不到com.cloud.hw03.WordCount这个完整类名对应的文件)。
分步解决方案
1. 整理代码的包结构
先确保Java文件和包名对应上目录结构:
- 在你的Maven项目根目录(比如
eclipse-workspace/你的项目名)下,创建层级目录:src/main/java/com/cloud/hw03 - 把
WordCount.java移动到这个目录里,确保最终路径是:src/main/java/com/cloud/hw03/WordCount.java
2. 正确编译代码
回到项目根目录,执行编译命令,指定输出目录来保留包结构:
hadoop com.sun.tools.javac.Main -d ./classes src/main/java/com/cloud/hw03/WordCount.java
执行完后,你会在classes目录下看到完整的包路径:classes/com/cloud/hw03/,里面存放着编译好的WordCount.class、TokenizerMapper.class等文件。
3. 正确打包jar
基于classes目录的包结构打包,确保jar里保留完整的层级:
jar cvf WordCount.jar -C ./classes/ .
这里的-C ./classes/是让jar命令先切换到classes目录,再打包所有内容(.代表当前目录),这样包结构会被完整写入jar。
4. 正确运行程序
运行时必须指定包含包名的完整类名,而不是只写WordCount:
hadoop jar WordCount.jar com.cloud.hw03.WordCount /input/inputfile01 /input/outputfile01
验证步骤
你可以先检查jar包内容,确认包结构是否正确:
jar tf WordCount.jar
输出里如果能看到com/cloud/hw03/WordCount.class这条记录,就说明打包没问题了。
内容的提问来源于stack exchange,提问作者joy_jlee
相关产品推荐
相关产品推荐

