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

在Apache Hadoop 3.1.0伪分布式模式运行MRJob报错:输入路径不存在

解决mrjob在Hadoop伪分布式模式下的“File does not exist”错误

我来帮你排查这个输入路径不存在的问题——这类错误在mrjob结合Hadoop运行时特别常见,咱们一步步拆解解决:

1. 先确认文件是否真的在HDFS里

mrjob在Hadoop模式下默认会从**HDFS(分布式文件系统)**读取输入,而不是你的本地文件系统。所以首先要做的:

  • 用HDFS命令检查文件是否存在:
    hdfs dfs -ls /your/hdfs/path/to/dblp.xml
    
  • 如果返回“File does not exist”,说明文件还在本地,赶紧上传到HDFS:
    hdfs dfs -put /your/local/path/to/dblp.xml /your/hdfs/target/path/
    
  • 运行mrjob时,输入路径必须是HDFS的完整路径,比如:
    python article_count.py hdfs:///user/your_username/dblp.xml
    
    (注:hdfs:///是HDFS路径的标准前缀,也可以直接写绝对路径如/user/your_username/dblp.xml)

2. 检查mrjob的Hadoop配置是否正确

伪分布式模式下,mrjob需要知道Hadoop的安装路径和streaming jar包位置,否则可能无法正确访问HDFS:

方式一:在代码中指定配置

修改你的Python代码,添加配置项:

from mrjob.job import MRJob
import sys

class MRArticleCount(MRJob):
    def configure_args(self):
        super(MRArticleCount, self).configure_args()
        # 替换成你的Hadoop安装路径
        self.add_passthru_arg('--hadoop-home', default='/usr/local/hadoop-3.1.0', help='Path to Hadoop installation')
        # 替换成对应版本的hadoop-streaming.jar路径
        self.add_passthru_arg('--hadoop-streaming-jar', default='/usr/local/hadoop-3.1.0/share/hadoop/tools/lib/hadoop-streaming-3.1.0.jar')

    def mapper(self, _, line):
        yield "articles", line.count('</article>')
    def reducer(self, key, counts):
        yield key, sum(counts)

if __name__ == '__main__':
    MRArticleCount.run()

方式二:通过配置文件设置

在用户主目录下创建~/.mrjob.conf文件,写入以下内容:

[hadoop]
hadoop_home: /usr/local/hadoop-3.1.0
hadoop_streaming_jar: /usr/local/hadoop-3.1.0/share/hadoop/tools/lib/hadoop-streaming-3.1.0.jar

(记得替换成你自己的Hadoop安装路径)

3. 确保运行命令的参数完整

你提到的python article...可能省略了关键参数,完整的Hadoop模式运行命令应该是:

python article_count.py -r hadoop hdfs:///your/hdfs/path/to/dblp.xml

这里的-r hadoop明确告诉mrjob要使用Hadoop模式运行,避免它默认用本地模式(本地模式会读取本地文件,但你是在伪分布式环境下,应该用HDFS)。

4. 排查HDFS权限问题

有时候文件存在,但当前用户没有读取权限,也会触发“File does not exist”的错误:

  • 给文件添加读权限:
    hdfs dfs -chmod 644 /your/hdfs/path/to/dblp.xml
    
  • 或者确保你是用上传文件的用户身份运行mrjob(比如你用hadoop用户上传的文件,就不要用root用户运行程序)。

按照上面的步骤逐一排查,应该就能解决这个输入路径不存在的问题了。

内容的提问来源于stack exchange,提问作者bnguyen1994

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:22:29