Hive压缩与配置

优点

在Hadoop集群中,有大量的数据复制和移动操作,压缩过后可以减少文件的大小,从而可以减少磁盘和网络的I/O。

压缩格式

常见的有gzip、bzip2、lzo、snappy、lz4等压缩算法。一般来说,好的压缩算法都是在解压缩的时间和压缩率上有不同的权衡。比如说:snappy压缩算法虽然压缩率不高,但是解压缩的时间相对于前两个更短。在hadoop中的压缩格式需要支持分割(一个文件可以被压缩成几个文件,并且每个压缩文件可以单独解压),这样可以交给多个map任务处理。

Hive的压缩配置

**以配置snappy为例 **

  1. 因为Hive是以Hadoop框架为基础的,所以先要查看hadoop是否支持snappy压缩。
    使用下面的命令查看hadoop当前支持的压缩。可以发现默认情况下不支持snappy。
    [wulei@bigdata-00 hadoop-2.5.0]$ bin/hadoop checknative
    1.png
  2. 编译Snappy
    具体编译流程见:http://www.micmiu.com/bigdata/hadoop/hadoop-snappy-install-config/
  3. 检查是否编译成功


    2.png
  4. 在mapreduce中配置压缩
    首先说明mapreduce哪些过程可以设置压缩:需要分析处理的数据在进入map前可以压缩,然后解压处理,map处理完成后的输出可以压缩,这样可以减少网络I/O(reduce通常和map不在同一节点上),reduce拷贝压缩的数据后进行解压,处理完成后可以压缩存储在hdfs上,以减少磁盘占用量。


    4.png
  5. 在Hive中设置压缩
    因为有的hive语句是嵌套的,可以对hive的中间结果集也设置压缩
    hive.exec.compress.intermediate=true
    开启压缩
    mapreduce.map.output.compress=true
    配置压缩格式
    mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
  6. 因为Hive底层用的mapreduce,也可以直接在hadoop中对mapred-site.xml进行配置
        <!-- map输出压缩 -->
        <property>
                <name>mapreduce.map.output.compress</name>
                <value>true</value>
        </property>
        <property>
                <name>mapreduce.map.output.compress.codec</name>
                <value>org.apache.hadoop.io.compress.SnappyCodec</value>
        </property>
        <!-- reduce输出压缩 -->
        <property>
                <name>mapreduce.output.fileoutputformat.compress</name>
                <value>true</value>
        </property>
        <property>
                <name>mapreduce.output.fileoutputformat.compress.codec</name>
                <value>org.apache.hadoop.io.compress.SnappyCodec</value>
        </property>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容