WebHdfsFileSystem本地ip与网络ip hadoop

WebHdfsFileSystem本地ip与网络ip hadoop,hadoop,webhdfs,Hadoop,Webhdfs,需要从HDFS集群外部读取HDFS。我偶然发现了WebHdfsFileSystem,尽管我有了这个想法,但我无法使它与网络地址一起工作。例如,只要我使用127.0.0.1或localhost,下面的代码就可以正常工作。但是当我使用网络ip地址192.168的时候,我收到“重试连接到服务器”消息,后面是ConnectException import java.io.IOException; import org.apache.hadoop.conf.Configuration; import o

需要从HDFS集群外部读取HDFS。我偶然发现了WebHdfsFileSystem,尽管我有了这个想法,但我无法使它与网络地址一起工作。例如,只要我使用127.0.0.1或localhost,下面的代码就可以正常工作。但是当我使用网络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,我必须改变两件事:

  • 协议从
    hdfs://
    更改为
    webhdfs://
  • 端口更改为http端口(在我们的Hortonworks集群上是50070),而不是默认的hdfs端口(也可以称为RPC端口?),在我们的系统上是8020
适用于我的示例代码:

Configuration conf=new Configuration();
String conxUrl=String.format(“webhdfs://%s:%s”,NAMENODE\u IP\u ADDR,webhdfs\u PORT);
conf.set(“fs.defaultFS”,conxUrl);
FileSystem fs=WebHdfsFileSystem.get(conf);
路径路径=新路径(“/Path/to/my/file”);
System.out.println(fs.exists(path));