使用jar命令运行Hadoop WordCount程序时提示‘No such file or directory’
解决Hadoop WordCount运行时的“No such file or directory”错误
作为刚上手Hadoop的新手,碰到这个错误太常见了,咱们一步步来排查可能的问题:
1. 检查命令中的关键路径是否正确
你运行的hadoop jar命令里包含三个核心路径:jar包路径、HDFS输入路径、HDFS输出路径,得逐一核对:
- Jar包路径:先确认你指定的jar文件真实存在。比如你写的是
hadoop jar ~/wordcount/WordCount.jar ...,可以先在终端执行ls ~/wordcount/,看看这个jar包是不是在目标位置,注意别犯大小写、拼写错误。 - 输入文件路径:Hadoop读取的是HDFS上的文件,不是本地系统的!如果你直接写了本地路径比如
/home/xxx/test.txt,肯定会找不到。得先把本地文件上传到HDFS,比如执行hdfs dfs -put /home/xxx/test.txt /user/xxx/input/,之后命令里的输入路径要写HDFS路径/user/xxx/input/test.txt或者整个输入目录/user/xxx/input。 - 输出路径:Hadoop要求输出路径必须不存在,如果之前运行过一次,这个目录已经存在,也会抛出类似的错误(有时候提示信息不够直观)。你可以先执行
hdfs dfs -rm -r /user/xxx/output删掉已有的输出目录,再重新运行命令。
2. 确认HDFS服务状态正常
如果HDFS没启动或者出现异常,也会导致文件找不到的问题。先执行jps命令,查看是否有NameNode、DataNode这两个进程在运行。如果没有,先启动Hadoop集群:
start-dfs.sh start-yarn.sh
启动完成后,再用hdfs dfs -ls /测试HDFS根目录是否能正常访问。
3. 检查Jar包的主类配置
你的WordCount程序有没有正确指定主类入口?如果jar包内没有配置主类,运行hadoop jar时需要明确主类的完整路径,比如:
hadoop jar WordCount.jar com.yourpackage.WordCount /user/xxx/input /user/xxx/output
要是漏了主类,Hadoop找不到要执行的程序,也可能抛出奇怪的“文件找不到”错误。你可以用jar tf WordCount.jar查看jar包内的文件,确认com/yourpackage/WordCount.class这类主类文件是否存在。
4. 核对HDFS路径的权限
确保当前用户对HDFS上的输入、输出路径有读写权限。比如执行hdfs dfs -ls /user/xxx/input如果无法查看内容,就是权限不足。可以用hdfs dfs -chmod 755 /user/xxx/input调整权限,或者确保你是用创建这些目录的用户来运行命令。
先从这几个方向排查,一般都能解决问题。如果还是不行,可以把完整的运行命令和错误提示贴出来,咱们再进一步分析~
内容的提问来源于stack exchange,提问作者Paul Alwin




