1 .MapReduce 跑的慢的原因

1.1主要有两点:

  • 计算机性能
    CPU、内存、磁盘、网络
  • IO 操作优化
  1. 数据倾斜
    2)Map 和 Reduce 数目设置不合理
    3)Map 时间过长,导致 Reduce 等待太久
    4)小文件过多
    5)大量的不可分块的超大文件
    6)spill(溢写)次数过多
    7)Merge 次数过多
    1.2 MapReduce 优化方法
  • 主要从六个方面考虑:数据输入,Map 阶段、Reduce 阶段、IO传输阶段、数据倾斜问题和参数调优。
    1.2.1 数据输入
    (1)合并小文件:在执行MR 任务前将小文件进行合并,大量的小文件会产生大量的map 任务,增大 map 任务装载次数,而任务的装在比较耗时,从而导致 mr 运行很慢。
    合并小文件的方法:
    (1)在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS。
    (2)在业务处理之前,在HDFS上使用MapReduce程序对小文件进行合并。
    (3)在MapReduce处理时,可采用CombineTextInputFormat提高效率。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200629221505801.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIzNjA5NjAz,size_10,color_FFFFFF,t_30

ha hadoop 优化 hadoop优化操作_hadoop


)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200629221555685.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIzNjA5NjAz,size_16,color_FFFFFF,t_30

ha hadoop 优化 hadoop优化操作_ha hadoop 优化_02

)

1.2.2 map阶段

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200629221751287.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIzNjA5NjAz,size_16,color_FFFFFF,t_30

ha hadoop 优化 hadoop优化操作_数据倾斜_03

)

1.2.3 Reduce 阶段

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200629221914746.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIzNjA5NjAz,size_16,color_FFFFFF,t_30

ha hadoop 优化 hadoop优化操作_数据_04

)

1.2.4 I/O传输

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200629222055387.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIzNjA5NjAz,size_16,color_FFFFFF,t_30

ha hadoop 优化 hadoop优化操作_数据倾斜_05

)

1.2.5 数据倾斜问题

(1)数据倾斜现象

数据频率倾斜: 某一个区域的数据量远远大于其他区域。

数据大小倾斜:部分记录的大小远远大于平均值。

(2)减少数据倾斜的方法

方法 1:抽样和范围分区

对原始数据进行抽样得到结果集,预设分区边界。

方法2 :自定义分区

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200629222430705.png

ha hadoop 优化 hadoop优化操作_插入图片_06

)![在这里插入图片描述](https://img-blog.csdnimg.cn/20200629222449789.png

ha hadoop 优化 hadoop优化操作_hadoop_07

)

方法 4 : Mapjoin,避免 Reduce join.

**mapjoin 的工作机制:**大表join 小表的时候,先把小表放进内存中,就避免了 reduce join 阶段

可分解为两部分:

1、TaskA ,它是一个localTask(在客户端本地执行的Task),负责扫描小表a的数据,将其转换成一个HashTable的数据结构,并写入本地文件中,之后将文件加载到 DistributeCache 中。

2、TaskB ,该任务就是一个没有Reduce 的Mr,启动 MapTask去扫描大表b,在Map 阶段,根据小表 a 的每一条记录去和 DistributeCache 中 大表 b 中的数据做关联,并直接输出结果。

所以MapJoin 没有Reduce.所有由 Map 直接输出文件,有多少个 MapTask ,就有多少个结果文件。

1.2.6 参数调优

![(1)](https://img-blog.csdnimg.cn/20200629222628210.png

ha hadoop 优化 hadoop优化操作_hadoop_08

)