我有一個Mapper類提供了一個文本鍵和IntWritable值,它可以是1或2或3。取決於我必須用不同的keys寫三個不同的文件的值。我得到一個沒有記錄的單個文件輸出。 另外,有什麼好的MultipleOutputs例子(與解釋),你可以指導我?爲什麼MultipleOutputs不適用於此Map Reduce程序?
我的驅動類有此代碼: MultipleOutputs.addNamedOutput(job,「name」,TextOutputFormat.class,Text.class,IntWritable.class); MultipleOutputs.addNamedOutput(job,「attributes」,TextOutputFormat.class,Text.class,IntWritable.class); MultipleOutputs.addNamedOutput(job,「others」,TextOutputFormat.class,Text.class,IntWritable.class);
我減速機類: 公共靜態類減少擴展減速{
private MultipleOutputs mos;
public void setup(Context context) {
mos = new MultipleOutputs(context);
}
public void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {
int sum = 0;
String CheckKey = values.toString();
if("1".equals(CheckKey)) {
mos.write("name", key, new IntWritable(1));
}
else if("2".equals(CheckKey)) {
mos.write("attributes", key, new IntWritable(2));
}
else if("3".equals(CheckKey)) {
mos.write("others", key,new IntWritable(3));
}
/* for (IntWritable val : values) {
sum += val.get();
}*/
//context.write(key, null);
}
@Override
public void cleanup(Context context) throws IOException, InterruptedException {
mos.close();
}
}
P.S我是新來HADOOP/MAP-減少編程。
第一個隨機問題:你完全確定mos.write被調用?values.toString()看起來可疑嗎? – DDW
我不這麼認爲:減少輸入記錄= 30 13/10/04 12:46:52信息mapred.JobClient:減少輸入組= 3 13/10/04 12:46:52信息mapred.JobClient:組合輸出記錄= 0 13/10/04 12:46:52信息mapred.JobClient:物理內存(字節)快照= 230494208 13/10/04 12:46:52信息mapred.JobClient:減少輸出記錄= 0 13/10/04 12:46:52信息mapred。JobClient:虛擬內存(字節)快照= 700944384 13/10/04 12:46:52信息mapred.JobClient:地圖輸出記錄= 30 – David
這是我得到的日誌。輸出記錄爲零,儘管reducer可以獲得3條記錄。還有什麼好的MultipleOutputs例子可以幫助我? – David