我正在尝试连接到在远程计算机上运行的hdfs示例。
我在windows机器上运行eclipse,hdfs在unix机器上运行。这是我试过的
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://remoteHostName:portNumber");
DFSClient client = null;
System.out.println("try");
try
{
System.out.println("trying");
client = new DFSClient(conf);
System.out.println(client);
}
catch (IOException e) {
e.printStackTrace();
}
finally {
if(client!=null)
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
但这给了我以下例外
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.ipc.RPC.getProxy(Ljava/lang/Class;JLjava/net/InetSocketAddress;Lorg/apache/hadoop/security/UserGroupInformation;Lorg/apache/hadoop/conf/Configuration;Ljavax/net/SocketFactory;ILorg/apache/hadoop/io/retry/RetryPolicy;Z)Lorg/apache/hadoop/ipc/VersionedProtocol;
at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:135)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:280)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:245)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:235)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:226)
顺便说一下,我从远程机器上的hdfs-site.xml中获得了端口号
这种方法正确吗?
另外,在python中这样做会更容易吗?
编辑
注意,我确实在windows上解压了hadoop二进制文件,并相应地设置了hadoop\u home环境变量。这会引起问题吗?
1条答案
按热度按时间ev7lccsx1#
请参阅:hadoop2.6.0浏览文件系统java以了解您的具体问题。
除此之外,您还可以考虑使用rest进行远程交互。apacheknox可以为您提供对远程集群的访问,并保护您的代码不必了解集群内部结构,例如host:port,kerberos或not,等等。这些东西可以从您的远程客户机下更改出来。