MR数据压缩
MR支持的压缩编码
压缩格式 | 是否可切片 | 特点 |
---|---|---|
DEFLATE | 否 | |
Gzip | 否 | 比较好用,存储方面比较优秀 |
Bzip2 | 是 | 压缩的最小,速度最慢 |
LZO | 是 | 需要安装和建立索引 |
Snappy | 否 | 最好用,速度最快 |
数据压缩的位置
-
输入端采用压缩:
- 数据量小于块大小,重点考虑压缩速度最快的snappy
- 数据量非常大,考虑是否可以支持切片,比如LZO
-
Mapper输出采用压缩:考虑压缩和解压缩的速度,比如snappy
-
Reducer输出采用压缩
- 热数据一般不压缩或者选择压缩解压速度很块的
- 冷数据考虑压缩比较高的,比如Bzip2和Gzip
使用压缩
-
hadoop checknative
: 查看hadoop支持的压缩算法 - 在Driver类中开启在Mapper输出进行压缩
- 设置压缩算法的全类名为Bzip2, 这个压缩算法速度很慢,而且会占用CPU和内存
- Driver类中在reducer输出端也可以开启压缩算法,也可以设置相应的压缩算法
企业开发优化
Map优化
- 输入时采用CombineTextInputFormat切片规则,合并小文件
- 自定义分区,实现Partitioner接口,重写getPartition方法,减少数据倾斜
- 减少溢写的次数
- 提高环形缓冲区的大小,跟MapTask的内存空间保持1:10的关系
- 提高环形缓冲区的阈值,提高到90%
- 增加每次Merge合并次数,默认是10,提高到20
- 在不影响业务结果的前提下,可以提前采用Combiner
- 加法、乘法运算一般不影响
- 为了减少磁盘IO,可以采用snappy压缩
- 提高MapTask内存的 上限,默认是1G
- MapTask任务重试次数可以修改,但一般不修改,默认4次
Reducer优化
- Reducer拉取数据的并行度,默认是每次拉取5个,可以适当提高一点
- Buffer大小占Reduce可用内存的比例,默认是0.7,当内存增加时可以适当提高
- Buffer中数据达到多少比例开始写入磁盘,默认是0.66,比上一个参数小,可以提高一点
- 提高ReduceTask的内存上限,默认是1G,根据128M数据对应1G内存的原则,适当提高。
- MapTask完成的比例达到该值后才会为ReduceTask申请资源,默认是0.05.
- 设置Task卡死后的等待时间,默认是10分钟,可以调小一点,最小不能小于3分钟。
数据倾斜问题
- 数据倾斜现象: 某一个区域的数据量要远远大于其他区域
- 如何查看是否出现数据倾斜:
- 进行抽样检查
- 将数据进行wordcount
- 解决方案
- 自定义分区,将倾斜数据分化,建议直接随机函数分区
- 使用Combiner预聚合
- 采用Map Join,尽量避免Reduce Join
大量小文件问题优化
小文件较多时,会产生很多的元数据文件,导致寻址索引速度变慢。
解决方案:
- 存储方面:Hadoop Archive文件归档
- 计算方面:使用CombinerText输入数据到Map
Hadoop扩展新特性
集群迁移
- 老集群的NameNode位置为hadoop102
- 新集群的NameNode位置为hadoop105
distcp hdfs://hadoop102:8020/* hdfs://hadoop105:8020/*
存档和压缩
存档只是将文件拼接在一起,没有压缩文件的大小。存档后需要生成对应的文件索引,可能比原文件还会大一点。文章来源:https://uudwc.com/A/gVxje
hadoop archive -archiveName input.har -p 原文件路径 归档后路径
-
hadoop fs -ls /small/small.har
: 查看三个文件 -
hadoop fs -ls har:///small/small.har
: 查看原文件目录 -
hadoop fs -cp har:///small/small.har /input
: 拷贝后就会变回成归档前的文件
回收站
开启回收站功能,防止误删除,linux和HDFS默认是关闭的。fs.trash.interval = 0
, 表示文件的存活时间fs.trash.checkpoint.interval=0
, 检查回收站的间隔时间。必须小于文件的存活时间,否则文件的存活时间没有意义。文章来源地址https://uudwc.com/A/gVxje
- 启用回收站,在core-site.xml文件中添加
<property>
<name>fs.trash.interval</name>
<value>1</value>
</property>
- 注意,回收站权限仅限命令行使用,网页界面删除不会经过回收站。