如何使用 Java 远程创建 Hadoop 文件系统的实例?

Posted

技术标签:

【中文标题】如何使用 Java 远程创建 Hadoop 文件系统的实例?【英文标题】:How do I create an instance of a Hadoop file system remotely using Java? 【发布时间】:2016-09-23 09:24:51 【问题描述】:

我想通过 Java 远程访问 Hadoop 文件系统,但每次我运行以下代码时,它只显示本地文件系统。

我在 Stack Overflow 上经历了许多解决方案,但似乎没有任何效果。

这是当前的尝试:

代码

Configuration obj = new Configuration();

obj.set("fs.defaultFS", "hdfs://localhost:8020");
obj.addResource(new Path("/etc/hadoop/conf/core-site.xml"));
obj.addResource(new Path("/etc/hadoop/conf/hdfs-site.xml"));

URI uri = new URI("hdfs://localhost:8020/");
Path path =new Path("/Myfiles/wc.txt");
FileSystem fs = FileSystem.get(obj);

System.out.println(fs.getHomeDirectory());

if(fs instanceof DistributedFileSystem) 
    System.out.println("HDFS is the underlying filesystem");
 else 
    System.out.println("Other type of file system "+fs.getClass());


FSDataInputStream fsDataInputStream = fs.open(path);
InputStreamReader inputStreamReader = new InputStreamReader(fsDataInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line;
while((line=bufferedReader.readLine())!=null)
    System.out.println(line);

bufferedReader .close();

我做错了什么?

【问题讨论】:

发布您拥有的代码以及您看到的错误。 确保适当的core-site.xmlhdfs-site.xml 文件存在于应用程序的类路径中。这些文件应包含您的 Hadoop 集群的有效配置。 我试过了。你可以在我上面发布的代码中看到。 您是否在本地计算机上运行 Hadoop?文件 /Myfiles/wc.txt 是否存在于 HDFS 上? "/Myfiles/wc.txt" 这个文件存储在hdfs上。 【参考方案1】:

此设置:

obj.set("fs.defaultFS", "hdfs://localhost:8020");

这里已经存在了:(使用它没有意义。)

obj.addResource(new Path("/etc/hadoop/conf/core-site.xml"));
obj.addResource(new Path("/etc/hadoop/conf/hdfs-site.xml"));

当然,这些文件在 hadoop 集群之外是不可用的。你必须复制它们。

如果您的fs.defaultFSlocalhost:8020,则此代码将仅在名称节点正在侦听的主机上有效,而不是远程。 它应该类似于

obj.set("fs.default.name", "hdfs://mycluster.local:8020"); ( MRv1 )
obj.set("fs.defaultFS", "hdfs://mycluster.local:8020"); ( YARN )

我的 cluster.local 解析为名称节点的正确 IP 地址。

顺便说一句,从外部访问 HDFS 的最佳方式是 webHDFS。

【讨论】:

以上是关于如何使用 Java 远程创建 Hadoop 文件系统的实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Java 应用程序远程执行 Hadoop 命令

从远程机器将文件放在 HDFS 上时如何指定用户名?

如何用idea能不能远程连接hadoop

本地eclipse远程操作 hbase

编写java 程序与Linux进行远程连接并运行linux下的脚本

Hadoop——HDFS文件系统的Java API操作(上传下载查看删除创建文件)详细教学