hive添加压缩

本文介绍了如何在 Hive 中配置数据压缩,以提高 HDFS 存储效率。内容包括理解 Hive 对 HDFS 的数据处理方式,配置 mapred-site.xml 和 hive-site.xml 文件以启用压缩,以及 Sqoop 导入时指定压缩格式的必要性。关键参数如 `hive.exec.compress.intermediate`、`mapred.output.compress`、`mapred.output.compression.codec` 等在文中进行了详细说明。

 hive在存储数据时会对HDFS上的数据做映射,在MYSQL中仅仅存储的是元数据信息。所有的数据都是存储在HDFS上的。

 现在有个需求是需要对hive操作生成的数据改为压缩数据存储,提高HDFS的存储空间利用率。这里有几点需要记录的:

 1.如果是本地文件通过hadoop fs -put 操作上传到HDFS的时候是不会对数据做任何处理的,即使hdfs-site.xml中配置了压缩参数也是不生效的。为什么?因为这个操作仅仅是一个复制的过程。没有调用mapreduce任务,如果想使数据压缩就需要通过mapreduce任务来操作。

 2.由1可知如果简单的把文本数据拷贝到hive表的目录下是不会出现压缩后的数据的,即不会有压缩操作。

 3.hive配置map过程的压缩和最终结果的压缩可以在两个地方:hadoop下的mapred-site.xml中或则hive的hive-site.xml中。如果是前者配置了所有的hadoop上的mapreduce任务都会做压缩处理,如果是后者配置了则只有hive的sql语句所创建的mapreduce任务会做压缩处理。所以如果不想所有的任务都做压缩操作,可以在hive-site.xml中配置。

 4.hive配置压缩可以有两种方式:其一是在hive的shell中 set 各种参数,这个是会话有效的。其二是就是在hive-site.xml中配置是全局有效的。

 5.工作中用到了sqoop直接把数据从数据库中导入到hive中,但是如果sqoop不指定压缩,导入到HDFS中的数据其实还是文本格式。所以需要指定参数 --compression-codec org.apache.hadoop.io.compress.BZip2Codec 来保证导入到HDFS中的数据是使用bzip2的压缩方式(bzip2压缩支持分隔)

 6.下面展示下hive-site.xml中配置的参数列表

    <property>
          <name>hive.exec.compress.intermediate</name> //开启hive压缩
          <value>true</value>
       </property>

       <property>
          <name>mapred.output.compress</name> //开启mapreduce的压缩
          <value>true</value>
       </property>

       <property>
         <name>mapred.output.compression.codec</name> //指定MR输出的压缩格式
         <value>org.apache.hadoop.io.compress.BZip2Codec</value>
         </property>

      <property>
         <name>hive.exec.compress.output</name>
         <value>true</value>
         </property>
      
      <property>
        <name>mapred.compress.map.output</name> //开启map阶段的压缩,减少map数据的传输
        <value>true</value>
        </property>

     <property>
         <name>mapred.map.output.compression.codec</name> //指定map阶段数据的压缩格式。
         <value>org.apache.hadoop.io.compress.SnappyCodec</value>
         </property>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值