Reduceタスクで使用する前に、Mapタスクの出力をディスクに保存する場所を調べようとしています。HadoopではフレームワークがMapタスクの出力を通常のMap-Reduceアプリケーションに保存しますか?
注: - :
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.
}
私は見つけることが興味を持ってい使用したバージョンマップクラスのmapメソッドを上書きする場合、例えば新しいAPI
でのHadoop 0.20.204ですcontext.write()はどこでデータの書き込みを終了しますか?私にHDFS上の次の場所を提供します
FileOutputFormat.getWorkOutputPath(context);
:これまでのところ、私はに走ってきた
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
注:は、ジョブがマッパーで開始されたので、技術的には、マッパーのタスクを書いている一時フォルダは、それは出力がときに、NEが存在していますw仕事が始まります。それでも、入力パスは存在しないと言います。
一時的な出力先はどこですか?または、MapとReduceの両方のステージを持つジョブでMapタスクの出力を見つけることができる場所は何ですか?
BTWは、FileOutputhFormatと似ています。#getWorkOutputPathは、タスクの一時出力フォルダの場所を示し、APIタスクのマップタスクではありません。 'これを別のジョブの入力として使用しようとすると、次のエラーが表示されます。' - 通常、一時ファイルはジョブが完了すると削除されます。そうしないと、ノードがいっぱいになります。 –
OK、公正なポイントですが、他のジョブの実行中にジョブを開始しています。私はネストされたマップを減らしています。したがって、内部ジョブが実行されている間は、外部ジョブはビジー状態です。したがって、一時ファイルを削除しないでください。 – inquire
でも大丈夫です。十分に公正なものが削除されます。つまり、削除される前のどこかにあることを意味します。私はそれがどこであるかを知る必要があります。 :D – inquire