Hadoop 3.1.1创建FileSystem实例出现StackOverflowError求助
StackOverflowError when creating HDFS FileSystem instance
你的问题根源在于fs.defaultFS的配置值错误,将其设置为"/"会导致FileSystem在解析URI时陷入无限循环,最终触发StackOverflowError。
解决方案:
- 必须将
fs.defaultFS配置为HDFS集群NameNode的完整URI格式,而非单纯的"/"。格式为hdfs://<namenode-hostname>:<port>(默认端口通常是9000,需根据你的集群实际配置调整)。 - 如果你不想手动指定,也可以让
Configuration自动加载集群的core-site.xml配置文件(该文件中已正确配置fs.defaultFS)。
修改后的代码示例:
方式1:手动指定正确的NameNode URI
Configuration config = new Configuration(); // 替换为你的NameNode主机和端口 config.set("fs.defaultFS", "hdfs://your-namenode-host:9000"); FileSystem hdfs = FileSystem.get(new URI("hdfs://your-namenode-host:9000"), config);
方式2:加载集群配置文件(推荐)
确保你的项目能访问到Hadoop集群的core-site.xml和hdfs-site.xml(可将这些文件放在项目的resources目录下),然后直接初始化:
Configuration config = new Configuration(); // 会自动加载classpath下的core-site.xml等配置 FileSystem hdfs = FileSystem.get(config);
关于HADOOP-13792的说明:
HADOOP-13792修复的是特定场景下的URI解析循环问题,但你的情况并非该bug导致——即使在3.1.1版本中,错误的fs.defaultFS配置(比如"/")仍然会触发栈溢出,因为FileSystem无法从这个值解析出有效的分布式文件系统地址,进而陷入重复解析的循环。
内容的提问来源于stack exchange,提问作者Jelly
相关产品推荐
相关产品推荐

