我已根据我的逻辑实现了自定义分区。我也能正确获取文件。但是由于条件,某些reducer的数据非常庞大,导致减速器阶段延迟。
所以有任何方法可以在一个reducer输出文件中创建许多小文件。
这是我的自定义分区
public class MyPartioner extends Partitioner<Text, IntWritable> {
public int getPartition(Text key, IntWritable value, int setNumRedTask) {
String str = key.toString();
if (str.contains("Japan|2014")) {
return 0;
} else if (str.contains("Japan|2013")) {
return 1;
} else if (str.contains("Japan|2012")) {
return 2;
} else if (str.contains("Japan|2011")) {
return 3;
} else
return 4;
}
第一个条件有非常大量的数据,如20 GB,但最后一个将有12 mb。
答案 0 :(得分:0)
您的输入集有很多记录有“日本| 2014”。
最简单的方法是添加“Japan | {month} | 2014”或使用多输出来实现相同目的。