Map端数据倾斜

liquan-anran 2018-08-09 原文

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个才对。

wKioL1l61EOCaDlxAAAXyiYuQq0361.png-wh_50

有如下结论

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

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

wKioL1l61ELjVVSYAAAxifWuHZo879.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);

}

压缩的文件,要用特殊的input输入类,不然文件不切分

版权声明:本文为liquan-anran原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/liquan-anran/p/9447435.html

Map端数据倾斜的更多相关文章

  1. 大数据技术 – 通俗理解MapReduce之WordCount(三)

    上一章我们编写了简单的 MapReduce 程序,掌握这些就能编写大多数数据处理的代码。但是 MapReduc […]...

  2. hadoop入门-运行模式-分布式搭建

    Hadoop运行模式1)Hadoop官方网站:http://hadoop.apache.org/2)Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。伪分...

  3. 搭建Hadoop集群(centos6.7+hadoop-2.7.3)

      hadoop集群有三种运行模式:单机模式、伪分布模式、完全分布模式。我们这里搭建第三种完全分布模式,即使用 […]...

  4. 【云原生】Hadoop HA on k8s 环境部署

    目录一、概述二、开始部署1)添加 journalNode 编排1、控制器Statefulset2、service2)修改配置1、修改values.yaml2、修改hadoop/templates/hadoop-configmap.yaml...

  5. Hadoop 源码编译

    1. 源码编译原因 Apache Hadoop 官方提供的是32位源码,而Windows为64位; 2. 编译 […]...

  6. hadoop配置day01

    hadoop安装jdk配置文件:sudo vim /etc/profile配置文件:export JAVA_HOME=/home/hadoop/jvm/jdk1.8.0_341export JRE_HOME=${JAVA_HO...

  7. idea+Hadoop 增删改查20220614

    1、window hadoop 安装 2、hadoop 配置 注dfs.permissions.enabled =false 权限放开 3、hadoop 启动...

  8. shells/hadoop

    1 #!/bin/bash2 case $1 in3 ""){4 /root/shells/stopfirewalld.sh5 /root/shells/wait-time.sh 36 /root/shells/hadoop.sh star...

随机推荐

  1. 国内OCR供应商及其演示链接

    最近因为需要收集了一些OCR的供应商,可以做身份证识别,银行卡识别,名片识别等特定场景下的文字识别。在通用场景 […]...

  2. radius服务器搭建

    yum install -y unzip gcc-c++ cd /opt unzip release-stab […]...

  3. C# 语音识别(文字to语音、语音to文字) – CosmoKey

    C# 语音识别(文字to语音、语音to文字) C# 语音识别(文字to语音、语音to文字) 最近打算研究一下语 […]...

  4. 程序员代码打字练习题库 – 法门扫地僧

    程序员代码打字练习题库 创建一个新的txt文件,将本文内容全选,粘贴,保存。然后导入金山打字通,即可练习程序员 […]...

  5. 每一个都堪称神器!推荐8个鲜为人知的小众网站,一旦用上你就在也离不开了!

    1.地图生成器:http://datav.aliyun.com/tools/atlas 第一个,我要给大家推荐 […]...

  6. 一分钟带你读懂什么是堆?

    上一篇的 「Java 集合框架」里,还剩下一个大问题没有说的,那就是 PriorityQueue,优先队列,也 […]...

  7. 抽象类

    一、什么是抽象类?         在父类中,有一些子类的共同方法,但这些方法在父类中没有具体的实现,这样的方 […]...

  8. Python变量小秘密

    变量全都是引用 跟其他编程语言不同,Python的变量不是盒子,不会存储数据,它们只是引用,就像标签一样,贴在 […]...

展开目录

目录导航