压缩的优势:可以最小化所需要的磁盘存储空间,以及减小磁盘和网络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、压缩:包扎