gpt4 book ai didi

hadoop - WebHdfsFileSystem 本地 ip 与网络 ip hadoop

转载 作者:可可西里 更新时间:2023-11-01 14:50:11 26 4
gpt4 key购买 nike

需要从 hdfs 集群外部读取 HDFS。我偶然发现了 WebHdfsFileSystem,尽管我有了这个想法,但我无法让它与网络地址一起工作。例如,只要我使用 127.0.0.1 或本地主机,下面的代码就可以正常工作。但是当我使用网络 IP 地址 192.168.. 时,我收到“重试连接到服务器”消息,然后是 ConnectException。

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.web.WebHdfsFileSystem;



public class ReadHDFSFile {

public static void main(String[] args) {
Path p = new Path("hdfs://127.0.0.1:9000/user/hduser");
WebHdfsFileSystem web = new WebHdfsFileSystem();
try {
Configuration conf = new Configuration();
conf.set("fs.default.name","hdfs://127.0.0.1:9000/");
web.setConf(conf);
Configuration conf1 = web.getConf();
FileSystem fs = FileSystem.get(web.getConf());
System.out.println(fs.exists(p));
} catch (IOException e) {
e.printStackTrace();
}
}
}

我不确定我在这里遗漏了什么。

最佳答案

我有一个在 Hadoop 2.4 上运行的版本。与使用常规 Hadoop 文件系统 API 相关,我必须更改两件事:

  • 协议(protocol)从 hdfs:// 更改为 webhdfs://
  • 端口更改为 http 端口(在我们的 Hortonworks 集群上为 50070),而不是默认的 hdfs 端口(也可能称为 RPC 端口?),在我们的系统上为 8020

适用于我的示例代码:

Configuration conf = new Configuration();
String conxUrl = String.format("webhdfs://%s:%s", NAMENODE_IP_ADDR, WEBHDFS_PORT);
conf.set("fs.defaultFS", conxUrl);

FileSystem fs = WebHdfsFileSystem.get(conf);
Path path = new Path("/path/to/my/file");
System.out.println(fs.exists(path));

关于hadoop - WebHdfsFileSystem 本地 ip 与网络 ip hadoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19439357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com