如何在Java应用程序中在不同的hadoop集群之间传输数据?

如何在Java应用程序中在不同的hadoop集群之间传输数据?,hadoop,Hadoop,我的示例java应用程序是从一个hadoop集群读取数据,并将其存储在另一个hadoop集群中(比如A、B) 这是从A中读取数据的示例代码 StringBuilder result=new StringBuilder(); Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); FileStatus[] status=fs.listStatus(new Path

我的示例java应用程序是从一个hadoop集群读取数据,并将其存储在另一个hadoop集群中(比如A、B)

这是从A中读取数据的示例代码

    StringBuilder result=new StringBuilder();
    Configuration conf = new Configuration();
    FileSystem fs = FileSystem.get(conf);
    FileStatus[] status=fs.listStatus(new Path("/result/test1"));
    for(FileStatus file:status){
        System.out.println(file.getPath().toString());
        if(file.getPath().toString().contains("part")){
            FSDataInputStream inputStream=fs.open(file.getPath());
            String inputString;
            while((inputString=inputStream.readLine())!=null){
                result.append(inputString);
            }
        }
    }
下面的代码是访问B

    conf.set("fs.default.name", "hdfs://10.101.51.221:9000");
    conf.set("mapred.job.tracker", "hdfs://10.101.51.221:9001");
    fs=FileSystem.get(conf);
这个示例java应用程序在其构建路径中包含了A的hadoop/conf/*来访问A,我想我也可以通过更改fs.default.name和mapred.job.tracker来访问B,但它不起作用。错误消息类似于

13/08/21 14:41:08 INFO ipc.Client: Retrying connect to server: Already tried 0 time(s).
...
13/08/21 14:41:26 INFO ipc.Client: Retrying connect to server: Already tried 9 time(s).
Exception in thread "main" java.net.ConnectException: Call to server failed on connection exception: java.net.ConnectException: Connection refused: no further information
有关此问题的任何提示都将受到欢迎

DistCp(分布式拷贝)是用于大型集群间/集群内拷贝的工具

  • bash$hadoop distcphdfs://src:8020/foo/bar hdfs://dest:8020/bar/foo


在java应用程序中,您可以使用org.apache.hadoop.tools.DistCpclass

您能给我一些更详细的信息吗?我使用的是r1.2.0,并查看了文档中的api,但没有找到关于org.apache.hadoop.tools.DistCp类的任何信息