文章目录
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 | 否 | 和文本处理一样,不需要修改 |
压缩性能的比较
压缩算法 | 原始文件大小 | 压缩文件大小 | 压缩速度 | 解压速度 |
---|---|---|---|---|
gzip | 8.3GB | 1.8GB | 17.5MB/s | 58MB/s |
bzip2 | 8.3GB | 1.1GB | 2.4MB/s | 9.5MB/s |
LZO | 8.3GB | 2.9GB | 49.3MB/s | 74.6MB/s |
bizp2的压缩率最高,但是压缩速度很慢。
gzip属于中规中矩。
LZO压缩速度很快,但是压缩率不高。
Hadoop企业优化
MapReduce
瓶颈
-
计算机性能
- CPU
- 内存
- 磁盘健康
- 网络
- ……
-
I/O操作优化
- 数据倾斜
- Map和Reduce数设置不合理
- Map运行时间太长,导致Reduce等待过久
- 小文件过多
- 大量的不可切片的超大压缩文件
- Spill次数过多
- Merge次数过多
- ……
优化方法
MapReduce优化方法主要从六个方面考虑:数据输入、Map阶段、Reduce阶段、IO传输、数据倾斜问题和常用的调优参数。
数据输入
- 合并小文件,在执行MR任务前将小文件进行合并。
- 采用CombineTextInputFormat来作为输入,解决输入端大量小文件场景。
Map阶段
- 减少溢写(spill)次数:通过增加环形内存缓冲区的容量上限及触发溢写的百分比,来减少Spill次数,从而减少磁盘IO。
- 减少合并(Merge)次数:通过增大Merge的文件数目,减少Merge的次数,从而缩短MR处理时间。
- 在Map之后,不影响业务逻辑前提下,先进行Combine处理,相当于Local Reduce,减少IO。
Reduce阶段
- 合理设置Map和Reduce数:两个都不能设置太少或太多。太少会导致Task等待,延长处理时间;太多会导致Map、Reduce任务间竞争资源,造成处理超时等错误。
- 设置Map、Reduce共存:使Map运行到一定程度后,Reduce也开始运行,减少Reduce的等待时间。
- 规避使用Reduce:因为Reduce在用于连接数据集的时候将会产生大量的网络消耗。
- 合理设置Reduce端的Buffer:默认情况下,数据达到一个阈值的时候,Buffer中的数据会写入磁盘,涉及到很多次写磁盘->读磁盘的过程,可以通过配置参数来使Buffer中的一部分数据可以直接输送到Reduce。
I/O传输
- 数据压缩
- 使用Sequence二进制文件。
数据倾斜问题
特地总结了一篇博客
[https://blog.youkuaiyun.com/qq_51167849/article/details/121418959?spm=1001.2014.3001.5501]
Hadoop小文件优化方法
小文件弊端
- 小文件多的时候会产生很多的元数据文件,会大量占用NameNode的内存空间,使得寻址索引速度变慢。
- 小文件过多,在进行MR计算时,会生成过多切片,需要启动过多的MapTask。每一个MapTask处理的数据量小,导致MapTask的处理时间比启动时间还小,白白消耗资源。
优化的方向
- 在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS。通过Hadoop Archive将小文件存档,减少NN的内存使用。
- 在业务处理之前,在HDFS上使用MapReduce程序对小文件进行合并。SequenceFile是由一系列的二进制k/v组成,如果为key为文件名,value为文件内容,可将大批小文件合并成一个大文件
- 在MapReduce处理时,可采用CombineTextInputFormat提高效率。
并。SequenceFile是由一系列的二进制k/v组成,如果为key为文件名,value为文件内容,可将大批小文件合并成一个大文件 - 在MapReduce处理时,可采用CombineTextInputFormat提高效率。
- 开启uber模式,实现jvm重用。