大数据数据压缩和企业优化

MR数据压缩

MR支持的压缩编码

压缩格式 是否可切片 特点
DEFLATE
Gzip 比较好用,存储方面比较优秀
Bzip2 压缩的最小,速度最慢
LZO 需要安装和建立索引
Snappy 最好用,速度最快

数据压缩的位置

  • 输入端采用压缩:

    1. 数据量小于块大小,重点考虑压缩速度最快的snappy
    2. 数据量非常大,考虑是否可以支持切片,比如LZO
  • Mapper输出采用压缩:考虑压缩和解压缩的速度,比如snappy

  • Reducer输出采用压缩

    • 热数据一般不压缩或者选择压缩解压速度很块的
    • 冷数据考虑压缩比较高的,比如Bzip2和Gzip

使用压缩

  • hadoop checknative: 查看hadoop支持的压缩算法
  • 在Driver类中开启在Mapper输出进行压缩
  • 设置压缩算法的全类名为Bzip2, 这个压缩算法速度很慢,而且会占用CPU和内存
  • Driver类中在reducer输出端也可以开启压缩算法,也可以设置相应的压缩算法

企业开发优化

Map优化

  1. 输入时采用CombineTextInputFormat切片规则,合并小文件
  2. 自定义分区,实现Partitioner接口,重写getPartition方法,减少数据倾斜
  3. 减少溢写的次数
    • 提高环形缓冲区的大小,跟MapTask的内存空间保持1:10的关系
    • 提高环形缓冲区的阈值,提高到90%
  4. 增加每次Merge合并次数,默认是10,提高到20
  5. 在不影响业务结果的前提下,可以提前采用Combiner
    • 加法、乘法运算一般不影响
  6. 为了减少磁盘IO,可以采用snappy压缩
  7. 提高MapTask内存的 上限,默认是1G
  8. MapTask任务重试次数可以修改,但一般不修改,默认4次

Reducer优化

  1. Reducer拉取数据的并行度,默认是每次拉取5个,可以适当提高一点
  2. Buffer大小占Reduce可用内存的比例,默认是0.7,当内存增加时可以适当提高
  3. Buffer中数据达到多少比例开始写入磁盘,默认是0.66,比上一个参数小,可以提高一点
  4. 提高ReduceTask的内存上限,默认是1G,根据128M数据对应1G内存的原则,适当提高。
  5. MapTask完成的比例达到该值后才会为ReduceTask申请资源,默认是0.05.
  6. 设置Task卡死后的等待时间,默认是10分钟,可以调小一点,最小不能小于3分钟。

数据倾斜问题

  1. 数据倾斜现象: 某一个区域的数据量要远远大于其他区域
  2. 如何查看是否出现数据倾斜:
    • 进行抽样检查
    • 将数据进行wordcount
  3. 解决方案
    • 自定义分区,将倾斜数据分化,建议直接随机函数分区
    • 使用Combiner预聚合
    • 采用Map Join,尽量避免Reduce Join

大量小文件问题优化

小文件较多时,会产生很多的元数据文件,导致寻址索引速度变慢。
解决方案:

  1. 存储方面:Hadoop Archive文件归档
  2. 计算方面:使用CombinerText输入数据到Map

Hadoop扩展新特性

集群迁移

  • 老集群的NameNode位置为hadoop102
  • 新集群的NameNode位置为hadoop105
  • distcp hdfs://hadoop102:8020/* hdfs://hadoop105:8020/*

存档和压缩

存档只是将文件拼接在一起,没有压缩文件的大小。存档后需要生成对应的文件索引,可能比原文件还会大一点。

  • 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, 检查回收站的间隔时间。必须小于文件的存活时间,否则文件的存活时间没有意义。

  1. 启用回收站,在core-site.xml文件中添加
<property>
    <name>fs.trash.intervalname>
	<value>1value>
property>
  1. 注意,回收站权限仅限命令行使用,网页界面删除不会经过回收站。

你可能感兴趣的:(大数据,java,eclipse)