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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:11:05