【总结】一不小心的Map端数据倾斜

简介:

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

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


wKiom1l61EKjqDj8AAEHmnwbH98458.png-wh_50


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

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

输入1有50个分块

wKioL1l61ETCWVJyAABy3YbavEg425.png-wh_50

输入2有11个分块

wKiom1l61EOwVaFuAABotcapqu8698.png-wh_50


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

spacer.gifwKioL1l61EOCaDlxAAAXyiYuQq0361.png-wh_50

有如下结论

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

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

spacer.gifwKioL1l61ELjVVSYAAAxifWuHZo879.png-wh_50

存在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,如需转载请自行联系原作者


相关文章
|
存储 SQL 大数据
一篇文章搞懂数据仓库:三种事实表(设计原则,设计方法、对比)
一篇文章搞懂数据仓库:三种事实表(设计原则,设计方法、对比)
一篇文章搞懂数据仓库:三种事实表(设计原则,设计方法、对比)
|
SQL 分布式计算 算法
程序员必备的面试技巧——大数据工程师面试必备技能
程序员必备的面试技巧——大数据工程师面试必备技能
307 0
|
分布式计算 资源调度 Hadoop
Hadoop【环境搭建 02】【hadoop-3.1.3 单机版YARN】(配置、启动及验证)
Hadoop【环境搭建 02】【hadoop-3.1.3 单机版YARN】(配置、启动及验证)
186 0
|
SQL 消息中间件 Kafka
FlinkSQL 几种join
FlinkSQL 几种join
FlinkSQL 几种join
|
存储 分布式计算 OLAP
ClickHouse为什么查询速度快?
ClickHouse为什么查询速度快?
621 0
|
机器学习/深度学习 消息中间件 缓存
一文理解Flink 水位线(Flink Watermark)
一文理解Flink 水位线(Flink Watermark)
一文理解Flink 水位线(Flink Watermark)
|
算法 安全 Java
入职拼多多的Java面试经验分享(文档)
写在2023年初的蚂蚁、头条、拼多多的面试总结 文章有点长,请耐心看完,绝对有收获!不想听我BB直接进入面试分享: 准备过程 蚂蚁金服面试分享 拼多多面试分享 字节跳动面试分享 总结 说起来开始进行面试是年前倒数第二周,上午9点,我还在去公司的公交上,突然收到蚂蚁的面试电话,其实算不上真正的面试。面试官只是和我聊了下他们在做的事情(主要是做双十一这里大促的稳定性保障,偏中间件吧),说的很详细,然后和我沟通了下是否有兴趣,我表示有兴趣,后面就收到正式面试的通知,最后没选择去蚂蚁表示抱歉。
682 0
|
关系型数据库 MySQL 索引
mysql 中 in 和 exists 的区别?
mysql 中 in 和 exists 的区别?
469 0