我找到了一种通过以下方式连接到hadoop的方法hftp
,并且工作正常,(只读):
uri = "hftp://172.16.xxx.xxx:50070/";
System.out.println( "uri: " + uri );
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get( URI.create( uri ), conf );
fs.printStatistics();
但是,我想读/写以及复制文件,也就是说,我想通过 hdfs 连接。如何启用 hdfs 连接以便可以编辑实际的远程文件系统?
我尝试将上面的协议从hftp
-> hdfs
,但我遇到了以下异常...
(请原谅我对 url 协议和 hadoop 的了解不足,我认为这是一个有点奇怪的问题,但任何帮助将不胜感激!)
线程“main”中的异常 java.io.IOException:本地异常调用 /172.16.112.131:50070 失败:java.io.EOFException at org.apache.hadoop.ipc.Client.wrapException(Client.java:1139) at org.apache.hadoop.ipc.Client.call(Client.java:1107) 在 org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:226) 在 $Proxy0.getProtocolVersion(未知来源) 在 org .apache.hadoop.ipc.RPC.getProxy(RPC.java:398) 在 org.apache.hadoop.ipc.RPC.getProxy(RPC.java:384) 在 org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient .java:111)在org.apache.hadoop.hdfs.DFSClient。(DFSClient.java:213)在org.apache.hadoop.hdfs.DFSClient。(DFSClient.java:180)在org.apache.hadoop.hdfs。 DistributedFileSystem.initialize(DistributedFileSystem.java:89) 在 org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1514) 在 org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:67) 在org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:1548) 在 org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1530) 在 org.apache.hadoop.fs。 FileSystem.get(FileSystem.java:228) at sb.HadoopRemote.main(HadoopRemote.java:24)
只需添加core-site.xml
和hdfs-site.xml
您想要访问的 hadoop 的conf
,像这样:
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.testng.annotations.Test;
/**
* @author karan
*
*/
public class HadoopPushTester {
@Test
public void run() throws Exception {
Configuration conf = new Configuration();
conf.addResource(new Path("src/test/resources/HadoopConfs/core-site.xml"));
conf.addResource(new Path("src/test/resources/HadoopConfs/hdfs-site.xml"));
String dirName = "hdfs://hosthdfs:port/user/testJava";
// Values of hosthdfs:port can be found in the core-site.xml in the fs.default.name
FileSystem fileSystem = FileSystem.get(conf);
Path path = new Path(dirName);
if (fileSystem.exists(path)) {
System.out.println("Dir " + dirName + " already exists");
return;
}
// Create directories
fileSystem.mkdirs(path);
fileSystem.close();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)