java - 使用 Java API 将本地文件上传到远程 hdfs 但连接到 localhost

标签 java webhdfs

我有一个非常简单的上传方法来将文件上传到单节点 hdp2.5 集群:

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI("webhdfs://hdsfhost:50070", conf);
fs.copyFromLocalFile(false, true, new Path(localFilePath), new Path(hdfsPath));

跟踪流程正确启动时发生的情况:

  • 连接到 hdfshost:50070,
  • 检查文件是否已存在(否),
  • 连接到数据节点。

这就是失败的地方:发现数据节点是 localhost:50075 而不是 hdfshost:50075,导致“java.net.ConnectException:连接被拒绝”。

我在 hdp 上有以下相关设置:

  • dfs.client.use.datanode.hostname => true
  • dfs.datanode.http.address => 0.0.0.0:50075
  • dfs.namenode.http-address => 0.0.0.0:50070

我找不到使用 localhost 而不是 hdfshost 的任何原因(并且/etc/hosts 中没有覆盖,本地计算机上和集群上都没有覆盖)。任何帮助将不胜感激。

最佳答案

您需要将 http 地址的配置更改为您的本地 IP 地址,而不是 0.0.0.0。 0.0.0.0 被解析为 localhost,然后将由 dfs.client.use.datanode.hostname => true 使用而您的本地 IP 地址将解析为 DNS 名称,然后再次由主机名使用。

既然它有效,我会将其作为答案发布,因此我不知道我对解决方案的推理是否正确。如果有人知道确切原因,请将其添加为评论或编辑我的答案。

关于java - 使用 Java API 将本地文件上传到远程 hdfs 但连接到 localhost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41237999/

相关文章:

hadoop - 验证 HDFS 中文件的校验和

java - 如何将文件附加到可以在该 jar 内编辑的 jar?

java - 在 Spring Boot JPA 中使用 Hibernate 过滤器

java - 单击可展开 ListView

hadoop - 使用webhdfs读取文件

c# - 从 .Net 应用程序(控制台)访问受 kerberos 保护的 webhdfs

java - 如何使Eclipse 2020-06不将gradle文件作为Java类文件查看?

java - 修剪文本 - 当最后输入大量空格键时

java - 方案 : webhdfs 没有文件系统