压缩的优势:可以最小化所需要的磁盘存储空间,以及减小磁盘和网络I/O操作。
缺点:压缩过程和解压过程会增加CPU开销。
二、压缩/解码器
1、压缩方案
(1)GZIP和BZip2(内置)
(2)Snappy
(3)LZO
2、压缩方法比较:
(1)BZip2压缩率最高,但是同时需要消耗最多的CPU开销。
(2)GZip是压缩率和压缩/解压缩速度上的下一个选择
(3)LZO和Snappy压缩率相比前面的2种要小但是压缩/解压缩速度要快,特别时解压过程。
3、压缩格式的文件
压缩格式的文件是否可分割时一个需要考虑的因素。MapReduce需要将非常大的输入文件分割成多个划分(通常一个文件快对应一个划分,也就是64Mb的倍数),其中每个划分会被分发到一个单独的map进程中。只有当Hadoop知道文件中记录的边界时才可以进行这样的分割。对于文本文件,每一行都是一条记录,但是GZip和Snappy将这些边界信息掩盖掉了。BZip2和LZO提供了快(BLOCK)级别的压缩,也就是每个快中都含有完整的记录信息。
4、开启中间压缩
对中间数据进行压缩可以减少job中map和reduce task间的数据传输量。对于中间数据压缩,选择一个低CPU开销的编/解码器要比选择一个压缩率高的编/解码器要重要得多。
开启中间压缩:
<property>
<name>hive.exec.compress.intermediate</name>
<value>true</value>
</property>
5、最终输出结果压缩
属性hive.exec.compress.output,默认值false.输出就是非压缩的纯文本文件。
如果设置为true,需要指定一个编解码器。
<property>
<name>mapred.output.compression.codec</name>
<value>org.apache.hadoop.io.compress.GzipCodec</value>
</property>
6、sequence file存储格式
7、使用压缩实践
CLI中通过set命令设置的属性会在同一个绘画中一直生效。因此,同一个会话中的不同例子键应该将设置复原,或者直接重开启一个Hie会话
(3) 开启输出结果压缩
(4)使用Sequence file
设想在最坏的情况下,最终结果是文件夹中只产生一个大的压缩文件,而且是不可分割的。这意味着后续步骤不能并行处理这个数据,解决方案是使用sequence file:
执行出错:
解决方法:
关闭开启中间压缩
8、存档分区
9、压缩:包扎