博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【总结】一不小心的Map端数据倾斜
阅读量:7182 次
发布时间:2019-06-29

本文共 1215 字,大约阅读时间需要 4 分钟。

MapReduce任务的数据倾斜一般指的是Reduce端数据倾斜,Map端怎么还会出现数据倾斜呢。~~

Mapper任务如下图所示,其中一个map任务耗时特别长

跑了一个ETL程序,两个Map分别读取两类数据,一个是lzo格式,另外一个是txt格式。

map任务通常是一个数据块一个map,为什么其中一个map计算会如此耗时呢,分别查看两个数据文件的分块情况

输入1有50个分块

输入2有11个分块

查看任务一共才有52个map。map格式应该是50+11=61个才对。

spacer.gif

有如下结论

MultipleInputs两个输入,有一个在数据输入的时候没有Split成功,考虑到其中一个输入是lzo,极有可能是该文件没有index索引造成。

于是检查lzo文件所在目录中,检查是否存在lzo.index文件。

spacer.gif

存在lzo.index文件,还能造成读取数据没有进行分块处理,于是检查代码发现,在处理lzo文件的时候采用了TextInputFormat(代码标红位置处已修改为LzoTextInputFormat)。

所以没有按照lzo.index进行文件分块。一个lzo文件都在一个map里面进行计算处理。导致处理数据map个数不对,并且其中一个map处理耗时长。

if (commonPath != null && commonPath.length() != 0) {

MultipleInputs.addInputPath(job, new Path(commonPath.toString()), TextInputFormat.class, MidHotelMapper.class);

} else {

logger.error("输入路径为空:-->{}", conf.get(CommonConstant.COMMON_TASK_INPUT));

System.exit(-1);

}

if (ctripPath != null && ctripPath.length() != 0) {

MultipleInputs.addInputPath(job, new Path(ctripPath.toString()), LzoTextInputFormat.class, MidCtripHotelMapper.class);

} else {

logger.error("输入路径为空:-->{}", conf.get(Constant.CTRIP_TASK_INPUT));

System.exit(-1);

}

修改之前这ETL任务平均耗时在16分钟左右。

修改之后,耗时只用2分钟。

竟然用TextInputFormat跑了两年的ETL。终于。。。有空查了一下修改过来

     本文转自巧克力黒 51CTO博客,原文链接:http://blog.51cto.com/10120275/1951711,如需转载请自行联系原作者

你可能感兴趣的文章
Ipython的 Debug 函数
查看>>
基于虹软sdk,java实现人脸识别(demo)
查看>>
Android模拟器入门
查看>>
ZOJ_1094/hdoj_1082_Matrix Chain Multiplication_...
查看>>
1040_As easy as A+B
查看>>
java8如何反射得到方法参数变量的名字
查看>>
Spring Data Redis 让 NoSQL 快如闪电 (1)
查看>>
git库detached heads问题处理
查看>>
String操作性能提升一
查看>>
服务器DNS选择的问题
查看>>
Centos Mysql 编译安装调试
查看>>
Midamble Allocation by layer 1
查看>>
孤荷凌寒自学python那些事第一天
查看>>
File server文件夹权限变更记录
查看>>
T-sql语句中GO的作用及语法
查看>>
我的友情链接
查看>>
【大数据-第二期】java基础第四天作业
查看>>
我的友情链接
查看>>
Fedora 18 -- Guides PDF
查看>>
Django+Nginx+Uwsgi架构部署,新建个app添加web(二)
查看>>