gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:13:05 25 4
gpt4 key购买 nike

我想通过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();

我做错了什么?

最佳答案

此设置:

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 - 如何使用Java远程创建Hadoop文件系统的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39657220/

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