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

Hadoop 2中HDFS路径异常:FileNotFoundException问题排查

Hadoop 2迁移后FileNotFoundException的原因分析

我来帮你拆解下这个问题——你的代码在Hadoop 1里运行正常,迁移到Hadoop 2就抛出文件不存在的异常,核心原因主要集中在以下几点:

1. URI字符串中的空格是致命坑点

先看你代码里这行关键代码:

URI localHDFSManifestUri = new URI(" hdfs:///WordCount/write");

注意到hdfs:///开头的空格了吗?Hadoop 1对URI的解析逻辑比较宽松,会自动忽略这种开头的无效空格;但Hadoop 2严格遵循URI规范,会把这个空格当成路径的一部分解析,相当于你实际访问的路径是 hdfs:///WordCount/write(带空格前缀),而HDFS上根本不存在这个带空格的路径,自然就触发FileNotFoundException了。

2. Hadoop 2对FileSystem API的解析逻辑更严格

Hadoop 2对FileSystem的初始化和路径校验做了不少优化和严格化调整:

  • 相比Hadoop 1,FileSystem.get(URI, Configuration)方法会严格校验URI的合法性,不会自动修正格式不规范的URI
  • 如果你的conf配置中已经设置了默认HDFS地址(比如fs.defaultFS),手动传入格式错误的URI可能会和默认配置冲突,进一步导致路径解析错误

3. 额外排查补充

虽然你提到Hadoop 1能正常运行,但还是可以快速确认两个点:

  • 确认HDFS上/WordCount/write路径确实存在,且当前运行代码的用户有访问权限(Hadoop 2的权限控制比Hadoop 1更严格)
  • 检查代码中hdfs:///WordCount/write的路径写法是否和集群FS配置匹配,如果集群HDFS地址是带主机名的hdfs://namenode:port/,直接写hdfs:///也会导致路径找不到

快速修复建议

先把URI字符串里的空格去掉,改成:

URI localHDFSManifestUri = new URI("hdfs:///WordCount/write");

重新运行代码,大概率就能解决这个问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:34:53