我在想办法解决我的问题。但我真的不知道怎么做。
我有一个hadoophdfs,我需要使用java将本地机器上的数据写入hdfs。目前,我已经这样解决了:
在本地计算机上创建文件
创建到安装hadoop的集群的ssh连接
将文件复制到群集(本地操作系统)
将文件从本地群集操作系统复制到hdfs( hadoop fs -put
).
它工作正常,但现在我需要复制文件没有ssh。我是说,我需要这样做:
在本地计算机上创建文件(不在群集中)
将文件直接复制到hdfs
我能找到的所有例子都展示了如何将文件从本地操作系统(集群)复制到hdfs。有人解决过这样的问题吗?
我这样写代码:
System.setProperty("java.security.auth.login.config", "jaas.conf");
System.setProperty("java.security.krb5.conf", "krb5.conf");
UsernamePasswordHandler passHandler = new UsernamePasswordHandler("user", "pass");
LoginContext loginContextHadoop = new LoginContext("Client", passHandler);
loginContextHadoop.login();
Configuration configuration = new Configuration();
configuration.set("hadoop.security.authentication", "Kerberos");
org.apache.hadoop.security.UserGroupInformation.setConfiguration(configuration);
org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(loginContextHadoop.getSubject());
FileSystem hdfs = FileSystem.get(new URI("hdfs://URI:50020"), configuration);
System.out.println(hdfs.getUsed());
获取如下错误:org.apache.hadoop.ipc.remoteexception(org.apache.hadoop.ipc.rpcnosuchprotocolexception):未知协议:org.apache.hadoop.hdfs.protocol.clientprotocol
我想我使用了错误的端口,我从dfs.datanode.ipc.address获取它。有人有什么想法吗?
暂无答案!
目前还没有任何答案,快来回答吧!