Hadoop数据压缩与解压缩

1,987 阅读2分钟

一、什么是压缩

压缩就是通过某种技术(算法)把原始文件大小变小,相应的解压就是把压缩后的文件变成原始文件。此处注意,压缩过程中,有些个别压缩算法是会丢失一部分数据的,看你们项目上对丢失数据的容忍程度了。

Hadoop的压缩与我们日常使用的解压缩不同,Hadoop在切片过程中,只支持特定的几种压缩类型,否则无法切片(Split)。

二、使用场景

  • 输入时

  • 中间过程中

  • 输出时

三、Hadoop文件压缩优势与缺点

  • 优势
    • 减少了文件所需的存储空间
    • 加快了文件在网络上或磁盘间的传输速度。
  • 缺点
    • 压缩和解压肯定要耗费CPU算力的,开启解压缩肯定会导致集群负载升高,从而导致你的计算缓慢,Job阻塞,文件读取变慢一系列原因。
  • 总结
    • 不同的场景选择不同的压缩方式。选择高压缩比,那么CPU的性能要高,同时解压缩时间耗费也多;选择压缩比低的,对于磁盘io、网络io的压力、空间占据要多。
    • 需要考虑到你使用的压缩格式,是否支持切片(Split)。如果不支持切片的压缩类型,整个Job的作业只能被分配到一个Task中执行。并行度问题使你需要考虑清楚你的压缩选型。
    • 没有什么压缩类型是一劳永逸的,选择最适合自己业务的压缩类型。举个例子:你渴了应该喝水,饿了应该吃饭。你如果饿了,选择去喝水。。。你得喝多少才能喝饱,就算喝饱了,又能有多持久 !0.0

四、压缩格式

  • 测试环境
    • TextData大小:1.4G
    • Core:8
    • Core主频:3.5GHz
    • Memory:16G
压缩格式文件扩展名压缩比压缩速率解压速率是否支持切割
gzip.gz68%86s22sNo
bzip.bz272%142s62s支持
LZO.lzo51%8s11s需要建立索引
Snappy.snappy50%6s20sNo
LZ4.LZ450%6s2sNo
  • 压缩比

  • 压缩时间

  • 排序

    • **压缩比:**Snappy < LZ4 < LZO < GZIP < BZIP2
    • **压缩时间比:**BZIP2 < GZIP < Snappy < LZO < LZ4

都说到这份上了,就不一一列举每个压缩格式的优劣。如果在不知道自己公司现有的业务适合什么压缩。。。。。

五、压缩参数设置

配置文件NameDefalt Value说明
core-site.xmlio.compression.codecs官网value默认是空的在命令行输入hadoop checknative查看
mapred-site.xmlmapper输出mapreduce.map.output.compressfalse设置为True启用
mapred-site.xmlmapper输出mapreduce.map.output.compress.codecorg.apache.hadoop.io.compress.DefaultCodec企业多使用LZO或Snappy编解码器在此阶段压缩数据
mapred-site.xmlreducer输出mapreduce.output.fileoutputformat.compressfalse设为true启用压缩
mapred-site.xmlreducer输出mapreduce.output.fileoutputformat.compress.codecorg.apache.hadoop.io.compress.DefaultCodec作业最终压缩
mapred-site.xmlmapreduce.output.fileoutputformat.compress.typeRECORDSequenceFile输出使用的压缩类型

六、压缩格式参数