自定义分区器中的一个reducer使mapreduce作业变慢

jtjikinw  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(225)

嗨,我有一个从hbase读取记录并写入文本文件的应用程序。应用程序按预期工作,但当测试这个巨大的数据,它需要1.20小时才能完成这项工作。这是我申请的详细资料
hbase中的数据大小为400 gb约20亿条记录。
我在hbase表中创建了400个区域,所以有400个Map器。
我使用了自定义分区器,将记录放入194个文本文件中。
我有lzo压缩的Map输出和gzip的最终输出。
我对我的行键使用了md5哈希
我使用自定义分区器进行数据隔离。我有194个分区和减速机和所有减速机得到完成非常快,除了最后两个有非常大的记录,因为条件没有。
我不知道如何处理这种情况。
我的情况是这样的,两个partitor将获得大量的无记录,我不能改变这一点也。
所有减速机在3分钟内完成,但由于这一整体工作需要30分钟的时间。
这是我的实现

hbaseConf.set("mapreduce.map.output.compress", "true");
hbaseConf.set("mapreduce.map.output.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec");

FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);

我的分区逻辑在这里

if (str.contains("Japan|^|2017|^|" + strFileName + "")) {

    return 0;

} else if (str.contains("Japan|^|2016|^|" + strFileName + "")) {

    return 1;

} else if (str.contains("Japan|^|2015|^|" + strFileName + "")) {

    return 2;

} else if (str.contains("Japan|^|2014|^|" + strFileName + "")) {

    return 3;

} else if (str.contains("Japan|^|2013|^|" + strFileName + "")) {

    return 4;
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题