关于Hadoop优化的那些不得不唠的事儿

Hadoop数据压缩

概述

压缩是提高Hadoop运行效率的一种优化策略

通过对Mapper、Reducer运行过程的数据进行压缩,

能够减少IO开销,提高MR程序运行速度,但同时也增加了CPU运算负担

因此它适用于IO密集型的job,不适合运算密集型的job。

MR支持的压缩编码

压缩格式hadoop自带?算法文件扩展名是否可切分换成压缩格式后,原来的程序是否需要修改
DEFLATE是,直接使用DEFLATE.deflate和文本处理一样,不需要修改
Gzip是,直接使用DEFLATE.gz和文本处理一样,不需要修改
bzip2是,直接使用bzip2.bz2和文本处理一样,不需要修改
LZO否,需要安装LZO.lzo需要建索引,还需要指定输入格式
Snappy是,直接使用Snappy.snappy和文本处理一样,不需要修改

压缩性能的比较

压缩算法原始文件大小压缩文件大小压缩速度解压速度
gzip8.3GB1.8GB17.5MB/s58MB/s
bzip28.3GB1.1GB2.4MB/s9.5MB/s
LZO8.3GB2.9GB49.3MB/s74.6MB/s
bizp2的压缩率最高,但是压缩速度很慢。
gzip属于中规中矩。
LZO压缩速度很快,但是压缩率不高。

Hadoop企业优化

MapReduce

瓶颈

  1. 计算机性能

    • CPU
    • 内存
    • 磁盘健康
    • 网络
    • ……
  2. I/O操作优化

    • 数据倾斜
    • Map和Reduce数设置不合理
    • Map运行时间太长,导致Reduce等待过久
    • 小文件过多
    • 大量的不可切片的超大压缩文件
    • Spill次数过多
    • Merge次数过多
    • ……

优化方法

MapReduce优化方法主要从六个方面考虑:数据输入、Map阶段、Reduce阶段、IO传输、数据倾斜问题和常用的调优参数

数据输入
  1. 合并小文件,在执行MR任务前将小文件进行合并。
  2. 采用CombineTextInputFormat来作为输入,解决输入端大量小文件场景。
Map阶段
  1. 减少溢写(spill)次数:通过增加环形内存缓冲区的容量上限及触发溢写的百分比,来减少Spill次数,从而减少磁盘IO。
  2. 减少合并(Merge)次数:通过增大Merge的文件数目,减少Merge的次数,从而缩短MR处理时间。
  3. 在Map之后,不影响业务逻辑前提下,先进行Combine处理,相当于Local Reduce,减少IO。
Reduce阶段
  1. 合理设置Map和Reduce数:两个都不能设置太少或太多。太少会导致Task等待,延长处理时间;太多会导致Map、Reduce任务间竞争资源,造成处理超时等错误。
  2. 设置Map、Reduce共存:使Map运行到一定程度后,Reduce也开始运行,减少Reduce的等待时间。
  3. 规避使用Reduce:因为Reduce在用于连接数据集的时候将会产生大量的网络消耗。
  4. 合理设置Reduce端的Buffer:默认情况下,数据达到一个阈值的时候,Buffer中的数据会写入磁盘,涉及到很多次写磁盘->读磁盘的过程,可以通过配置参数来使Buffer中的一部分数据可以直接输送到Reduce。
I/O传输
  1. 数据压缩
  2. 使用Sequence二进制文件。
数据倾斜问题

特地总结了一篇博客

[https://blog.csdn.net/qq_51167849/article/details/121418959?spm=1001.2014.3001.5501]

Hadoop小文件优化方法

小文件弊端

  1. 小文件多的时候会产生很多的元数据文件,会大量占用NameNode的内存空间,使得寻址索引速度变慢。
  2. 小文件过多,在进行MR计算时,会生成过多切片,需要启动过多的MapTask。每一个MapTask处理的数据量小,导致MapTask的处理时间比启动时间还小,白白消耗资源

优化的方向

  1. 在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS。通过Hadoop Archive将小文件存档,减少NN的内存使用。
  2. 在业务处理之前,在HDFS上使用MapReduce程序对小文件进行合并。SequenceFile是由一系列的二进制k/v组成,如果为key为文件名,value为文件内容,可将大批小文件合并成一个大文件
  3. 在MapReduce处理时,可采用CombineTextInputFormat提高效率。
    并。SequenceFile是由一系列的二进制k/v组成,如果为key为文件名,value为文件内容,可将大批小文件合并成一个大文件
  4. 在MapReduce处理时,可采用CombineTextInputFormat提高效率。
  5. 开启uber模式,实现jvm重用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值