如何通过java中的hdfs协议访问hadoop?

时间:2011-10-21 02:51:11

标签: ssh hadoop hdfs

我找到了一种通过hftp连接到hadoop的方法,它运行正常,(只读):

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失败:org.apache.hadoop.ipc.Client.wrapException中的java.io.EOFException(Client.java: 1139)atg.apache.hadoop.ipc.Client.call(Client.java:1107)org.apache.hadoop.ipc.RPC $ Invoker.invoke(RPC.java:226)at $ Proxy0.getProtocolVersion(Unknown Source )org.apache.hadoop.ipc.RPC.getProxy(RPC.java:398)位于org.apache.hadoop.hdfs.DFSClient的org.apache.hadoop.ipc.RPC.getProxy(RPC.java:384)。位于org.apache.hadoop.hdfs.DFSClient的(或DFSClient.java:213)org.apache.hadoop.hdfs.DFSClient。(DFSClient.java:180)org.apache.hadoop的createRPCNamenode(DFSClient.java:111)位于org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1514)的.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:89)org.apache.hadoop.fs.FileSystem.access $ 200(FileSystem.java: 67)在org.apache.hadoop.f的org.apache.hadoop.fs.FileSystem $ Cache.getInternal(FileSystem.java:1548) s.FileSystem $ Cache.get(FileSystem.java:1530)atg.apache.hadoop.fs.FileSystem.get(FileSystem.java:228)at sb.HadoopRemote.main(HadoopRemote.java:24)

2 个答案:

答案 0 :(得分:1)

关于hadoop:您需要确保在hadoop配置中core-site.xml namenode条目服务于0.0.0.0而不是127.0.0.1(localhost)。重要的是,由于某种原因,clouderas vm distro默认为localhost

答案 1 :(得分:1)

只需将您要点击的hadoop的core-site.xmlhdfs-site.xml添加到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();
    }
}