原因:文件夹和文件名都是存放在 NameNode 上的,本地可以通过公网访问 NameNode,所以创建文件夹和文件都可以,但是当写数据的时候,NameNode 和DataNode 是通过内网通信的,NameNode 会返回给 DataNode 的内网 IP,本地就访问不了了。
所以在java代码中需要添加一句
conf.set("dfs.client.use.datanode.hostname", "true");
并且将配置 hdfs-site.xml 文件内容中加上
<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
</property>
就可以成功写入了