如何在自定义分区器Hadoop中设置每个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

我已经根据我的逻辑实现了自定义分区。我也能够正确地获取文件。但是由于这种情况,一些reducer具有非常巨大的数据,这导致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;
  }
公共类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的输出文件。