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 タスクの出力を見つけることができる場所はどこでしょうか?