7

Map タスクの出力が Reduce タスクで使用される前にディスクに保存される場所を見つけようとしています。

注: - 使用されるバージョンは、新しい API を備えた Hadoop 0.20.204 です。

たとえば、Map クラスの map メソッドを上書きする場合:

public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
    String line = value.toString();
    StringTokenizer tokenizer = new StringTokenizer(line);
    while (tokenizer.hasMoreTokens()) {
        word.set(tokenizer.nextToken());
        context.write(word, one);
    }

    // code that starts a new Job.

}

context.write() がデータを書き込む場所を知りたいです。これまでのところ、次のことに遭遇しました。

FileOutputFormat.getWorkOutputPath(context);

これにより、hdfs 上の次の場所が得られます。

hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0

別のジョブの入力として使用しようとすると、次のエラーが表示されます。

org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0

注:ジョブは Mapper で開始されるため、技術的には、Mapper タスクがその出力を書き込んでいる一時フォルダーは、新しいジョブの開始時に存在します。繰り返しますが、入力パスが存在しないとまだ言われています。

一時的な出力がどこに書き込まれるかについてのアイデアはありますか? または、Map ステージと Reduce ステージの両方を持つジョブ中に Map タスクの出力を見つけることができる場所はどこでしょうか?

4

3 に答える 3

6

Map Reduce フレームワークは、中間出力を HDFS ではなくローカル ディスクに保存します。これは、ファイルの不必要なレプリケーションが発生するためです。

于 2013-08-05T04:31:44.213 に答える
5

それで、私は実際に何が起こっているのかを理解しました。

マッパーの出力は、サイズの約 80% になるまでバッファーに入れられ、その時点で結果をローカル ディスクにダンプし始め、アイテムをバッファーに入れ続けます。

マッパーがまだ実行されている間に、マッパーの中間出力を取得し、それを別のジョブの入力として使用したかったのです。これは、hadoop 0.20.204 デプロイメントを大幅に変更しないと不可能であることが判明しました。システムが動作する方法は、マップ コンテキストで指定されているすべてのことの後でさえあります。

map .... {
  setup(context)
  .
  .
  cleanup(context)
}

クリーンアップが呼び出されても、一時フォルダーへのダンプはまだありません。

その後、Map 計算全体が最終的にすべてマージされてディスクにダンプされ、Reducer の前にある Shuffle および Sorting ステージの入力になります。

私が読んだり見たりしたことすべてから遠く離れて、出力が最終的にあるべき一時フォルダーは、私が事前に推測していたものです。

FileOutputFormat.getWorkOutputPath(context)

やりたかったことを別の方法で実現できました。とにかく、これについて質問があるかもしれませんが、私に知らせてください。

于 2011-12-27T15:04:38.667 に答える
2

タスク トラッカーは、Map または Reduce タスクごとに個別の JVM プロセスを開始します。

マッパー出力 (中間データ) は、各マッパー スレーブ ノードのローカル ファイル システム (HDFS ではない) に書き込まれます。データが Reducer に転送されると、これらの一時ファイルにアクセスできなくなります。

Mapper の出力を確認する場合は、IdentityReducer?を使用することをお勧めします。

于 2011-12-23T15:24:04.457 に答える