大数据程序员技术文

Hive压缩与配置

2016-11-07  本文已影响1553人  心_的方向

优点

在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>
上一篇下一篇

猜你喜欢

热点阅读