在一般情況下,Hadoop 每一個 Reducer 產生一個輸出文件,文件以
part-r-00000、part-r-00001 的方式進行命名。如果需要人為的控制輸出文件的命
名或者每一個 Reducer 需要寫出多個輸出文件時,可以采用 MultipleOutputs 類來
完成。MultipleOutputs 采用輸出記錄的鍵值對(output Key 和 output Value)或者
任意字符串來生成輸出文件的名字,文件一般以 name-r-nnnnn 的格式進行命名,
其中 name 是程序設置的任意名字;nnnnn 表示分區號。
MultipleOutputs 的使用方式 的使用方式: :: :
想要使用 MultipeOutputs,需要完成以下四個步驟:
1. 在 Reducer 中聲明 MultipleOutputs 的變量
private MultipleOutputs
2. 在 Reducer 的 setup 函數中進行 MultipleOutputs 的初始化
protected void setup(Context context)throws IOException, InterruptedException {
multipleOutputs = new MultipleOutputs
}
3. 在 reduce 函數中進行輸出控制
protected void reduce(Text key, Iterable
InterruptedException {
for (Text value : values) {
multipleOutputs.write(NullWritable.get(), value, key.toString());
}
}
4. 在 cleanup 函數中關閉輸出 MultipleOutputs
protected void cleanup(Context context)throws IOException, InterruptedException {
multipleOutputs.close();
}
注意:multipleOutputs.write(key, value, baseOutputPath)方法的第三個函數表明了該輸出所在的目錄(相對於用戶指定的輸出目錄)。如果baseOutputPath不包含文件分隔符“/”,那麼輸出的文件格式為baseOutputPath-r-nnnnn(name-r-nnnnn);如果包含文件分隔符“/”,例如baseOutputPath=“029070-99999/1901/part”,那麼輸出文件則為