1

私はhadoopで次のことを試みています:

  1. ファイルをディレクトリ "foo" に出力する map-reduce ジョブを実装しました。
  2. foo ファイルは、key=IntWriteable、value=IntWriteable 形式です (SequenceFileOutputFormat を使用)。
  3. ここで、別の map-reduce ジョブを開始したいと思います。マッパーは問題ありませんが、各レデューサーは起動時に "foo" ファイル全体を読み取る必要があります (レデューサー間でデータを共有するために HDFS を使用しています)。

「public void configure(JobConf conf)」でこのコードを使用しました。

String uri = "out/foo";
FileSystem fs = FileSystem.get(URI.create(uri), conf);
FileStatus[] status = fs.listStatus(new Path(uri));
for (int i=0; i<status.length; ++i) {
    Path currFile = status[i].getPath();
    System.out.println("status: " + i + " " + currFile.toString());
    try {
        SequenceFile.Reader reader = null;
        reader = new SequenceFile.Reader(fs, currFile, conf);
        IntWritable key = (IntWritable) ReflectionUtils.newInstance(reader.getKeyClass(), conf);
        IntWritable value = (IntWritable ) ReflectionUtils.newInstance(reader.getValueClass(), conf);
        while (reader.next(key, value)) {
        // do the code for all the pairs.
        }
    }
}

コードは 1 台のマシンで問題なく動作しますが、クラスターで実行できるかどうかはわかりません。つまり、このコードは現在のマシンからファイルを読み取るのか、それとも分散システムから id を読み取るのか?

私がやろうとしていることに対するより良い解決策はありますか?

前もって感謝します、

アリク。

4

1 に答える 1