2017-03-31 58 views
0

我已经实现了基于我的逻辑的自定义分区,并且我能够正确地获取文件。但是由于条件,一些reducer的数据量非常大并导致延迟减速阶段。如何在自定义分区程序Hadoop中设置每个reducer的输出文件号

所以有什么办法可以在一个reducer输出文件中创建很多小文件。

这里是我的自定义partioner

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万桶。

回答

0

您的输入集有很多记录“Japan | 2014”。

最简单的方法是添加“日本| {月} | 2014”或使用多输出来实现相同。

+0

是的,我可以使用MultiOutput,但它会创建更多的文件,因为我从HBase有200个区域读取记录,因此它会创建200个输出文件。但在我的情况下,我需要一个日本输出文件?2014 。 – SUDARSHAN

相关问题