无法从集群网络外部的 Java 应用程序获取 HDFS 集群中文件的输入流



我的目标是:读取存储在HDFS集群中的文件的输入流(在我的本地机器网络之外(

我的本地计算机上有一个 Java 应用程序,并且群集驻留在不同的网络中。我是Hadoop的新手,所以我有几个问题:

1( 我如何知道我应该为主节点连接到的 IP 地址和端口?我有权访问 Hadoop 集群的配置文件

2(鉴于应用程序在集群网络之外,我应该将此解决方案理解为WebHDFS解决方案,还是WebHDFS一词是指仅通过Hadoop文件系统的Http协议进行通信的Hadoop应用程序?

HDFS-site.xml

<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data01/hadoop-data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data01/hadoop-data/datanode</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>ipc.maximum.data.length</name>
<value>134217728</value>
</property>
</configuration>

核心站点.xml

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop-master:9000/</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
</configuration>

从 Java 本地应用程序连接到另一个网络中的群集

String testURI = "hdfs://<MASTER_NODE_EXTERNAL_IP>:9000/user/ubuntu/testfolder/fileA.xml";
Configuration conf = new Configuration();
conf.set("fs.defaultFS", testURI);
//conf.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName());
System.setProperty("HADOOP_USER_NAME", "ubuntu");
System.setProperty("hadoop.home.dir", "/");
FileSystem fs = FileSystem.get(URI.create(testURI), conf);

InputStream is = null;
try{
is = fs.open(new Path(testURI));
IOUtils.copyBytes(is, System.out, 4096, false);
} finally {
IOUtils.closeStream(is);
}

我已经为主节点尝试了一堆不同的端口,但似乎没有一个返回任何文件内容,所有这些都在集群外抛出异常。

部署在集群内的相同应用程序并指定主节点的内部 IP 会导致主节点将应用程序定向到包含我要查找的文件的从属节点,并且输入流完美地打印到 System.out...

请原谅我的无知,HDFS设置是否缺少一些基本的东西?我几乎可以肯定,在我可以远程连接之前,这与集群上的配置更改有关......

这可能与无法从群集外部访问的网络设置和数据节点端口有关(这通常是一个很好的安全实践(

您可以使用WebHDFS从外部应用程序读取HDFS文件。这确实是一个 REST API (http(,记录在这里 https://bighadoop.wordpress.com/2013/06/02/hadoop-rest-api-webhdfs/和这里 https://hadoop.apache.org/docs/r1.2.1/webhdfs.html

最新更新