如何在自定义分区器Hadoop中设置每个reducer的输出文件数
我已经根据我的逻辑实现了自定义分区。我也能够正确地获取文件。但是由于这种情况,一些reducer具有非常巨大的数据,这导致reducer阶段的延迟 有没有办法在一个reducer输出文件中创建许多小文件 这是我的定制派对如何在自定义分区器Hadoop中设置每个reducer的输出文件数,hadoop,mapreduce,hadoop2,Hadoop,Mapreduce,Hadoop2,我已经根据我的逻辑实现了自定义分区。我也能够正确地获取文件。但是由于这种情况,一些reducer具有非常巨大的数据,这导致reducer阶段的延迟 有没有办法在一个reducer输出文件中创建许多小文件 这是我的定制派对 public class MyPartioner extends Partitioner<Text, IntWritable> { public int getPartition(Text key, IntWritable value, int setNumRe
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;
}
公共类MyPartitioner扩展了Partitioner{
公共int getPartition(文本键、IntWritable值、int setNumRedTask){
字符串str=key.toString();
如果(str.contains(“日本| 2014”)){
返回0;
}else if(str.contains(“日本| 2013”)){
返回1;
}否则如果(str.contains(“Japan | 2012”)){
返回2;
}else if(str.contains(“Japan | 2011”)){
返回3;
}否则
返回4;
}
第一个条件的数据量非常大,比如20GB,但最后一个条件的数据量为12MB。您的输入集有很多记录都有“Japan | 2014”
最简单的方法是添加“Japan |{month}| 2014”或使用多个输出来实现相同的效果。是的,我可以使用多个输出,但它会创建更多的文件,因为我正在从HBase读取具有200个区域的记录,因此它将创建200个输出文件。但在我的情况下,我需要一个用于Japan?2014的输出文件。