我正在尝试在Reducer中使用MultipleOutputs,以便使用分区器写入多个文件。为此,我尝试在Reducer.setup()中使用如下方法构建它的对象:
public static class MOReduce extends Reducer<Text, Integer, Text, Integer> {
private MultipleOutputs mos;
public void setup( Reducer.Context context ) {
mos = new MultipleOutputs( context.getConfiguration() );
}
但我面临的问题是因为以下原因:
- 根据文档,setup函数以Reducer.Context为参数
- 而根据本文档,MultipleOutputs构造函数需要JobConf。所以,基本上我没有办法从Reducer.Context中提取JobConf
- 我已经尝试过像Reducer.Context.getConfXXX这样返回JobConf的函数,但只有一个函数getConfiguration()返回JobContext
所以,你能建议我如何解决这个问题并实例化MultipleOutputs对象吗。
看看减速机中的多重输出
hadoop中有两个API用于创建和管理mapreduce作业。一个是与JobConf
有关,另一个与Job
有关。你似乎在用Job
。对于您的情况,如上面的链接所示,您需要创建自己的RecordWriter
类和OutputFormat
类。使用RecordWriter
,您可以控制写入哪些文件以及何时写入。