0

私のサンプル Java アプリケーションは、1 つの 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 にアクセスするためのビルドパスに A の hadoop/conf/* が含まれており、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

この問題に関するヒントをいただければ幸いです

4

1 に答える 1

0

DistCp (分散コピー) は、大規模なクラスター間/クラスター内コピーに使用されるツールです。

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

http://hadoop.apache.org/docs/stable/distcp.html#cpver

Java アプリケーションでは、 org.apache.hadoop.tools.DistCpクラスを使用できます

于 2013-08-21T09:14:34.403 に答える