嗨,我有一个从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;
}
暂无答案!
目前还没有任何答案,快来回答吧!