Hadoop 优化的一些方法

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_50
)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200629221555685.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIzNjA5NjAz,size_16,color_FFFFFF,t_70 )
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_70 )
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_70 )
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_70 )
1.2.5 数据倾斜问题
(1)数据倾斜现象
数据频率倾斜: 某一个区域的数据量远远大于其他区域。
数据大小倾斜:部分记录的大小远远大于平均值。
(2)减少数据倾斜的方法
方法 1:抽样和范围分区
对原始数据进行抽样得到结果集,预设分区边界。
方法2 :自定义分区
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200629222430705.png )![在这里插入图片描述](https://img-blog.csdnimg.cn/20200629222449789.png )
方法 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 )

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值