千家信息网

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

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,MapReduce任务的数据倾斜一般指的是Reduce端数据倾斜,Map端怎么还会出现数据倾斜呢。~~Mapper任务如下图所示,其中一个map任务耗时特别长跑了一个ETL程序,两个Map分别读取两类
千家信息网最后更新 2025年01月31日【总结】一不小心的Map端数据倾斜

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

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



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

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

输入1有50个分块

输入2有11个分块


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

有如下结论

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

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

存在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。终于。。。有空查了一下修改过来

数据 文件 输入 任务 处理 两个 格式 检查 代码 时候 路径 不对 成功 个数 位置 情况 所在 时长 目录 程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 西安学网络技术比较好的职高 江苏省网络安全工程专业人才 常见软件开发的模型的优缺点 英雄联盟手游主播玩的什么服务器 学什么网络技术可以找自由职业 阿里云服务器升级通知 服务器与终端 长沙泛明软件开发有限公司 ios 手机软件开发 校招数据库常见面试题 如何选择物流软件开发企业 中山富创网络技术有限公司 网络安全技术课后练习题 手机服务器怎么看地址 如何给网页链接数据库 租号玩服务器繁忙 数据库中递归关系 数据库的安全机制包括_ 云服务器连接电脑虚拟机 该如何加强网络安全 克罗米服务器为什么没人了 公安部门信息网络安全 机关工委网络安全工作总结 2022全国大学生网络安全 云游戏使用什么类型的服务器 政府软件开发哪的服务好 软件开发工资主要是干什么 服务器显示未连接无法上网 江苏网络安全宣传周2019 五华区方便软件开发价格信息
0