16-hive 文件压缩

来源:互联网 发布:java rmi 端口 编辑:程序博客网 时间:2024/04/19 14:33

1. 介绍:

  1. Hive 的一个独特的功能就是:Hive 不会强制要求将数据转换成特定的格式才能使用.
  2. Hive 利用 Hadoop 的 InputFormat API 来从不同的数据源读取数据, 例如文本格式,sequence 文件格式, 甚至用户自定义格式。
  3. Hive 利用 OutputFormat API 也可以将数据写成不同的格式。
  4. 尽管 Hadoop 的文件系统支持对于非压缩数据的线性扩展存储, 但是对数据进行压缩还是有很大好处。
  5. 压缩通常都会节约客观的磁盘空间
  6. 压缩同样可以增加吞吐量和性能。[通过压缩减少载入内存的数据量而提高I/O吞吐量会更加提高网络传输性能]。
  7. Hadoop 的 job 通常是 I/O 密集型而不是 CPU 密集型的。对于这种类型,压缩可以提高性能。
  8. 如果 job 是 CPU 密集型的话, 那么使用压缩可能会降低执行性能。

2. 配置编解码器

  • 配置文件 core-site.xml
<property><name>io.compression.codecs</name><value>    org.apache.hadoop.io.compress.DefaultCodec,    org.apache.hadoop.io.compress.GzipCodec,    org.apache.hadoop.io.compress.Bzip2Codec,    org.apache.hadoop.io.compress.SnappyCodec</value></property>
  • 开启具体的压缩算法参数配置 :

    1. 可以在 ${HADOOP_HOME}/conf/mapred-site.xml${HADOOP_HOME}/conf/hive-site.xml 配置文件中配置。
    2. 这里使用 Snappy 的压缩算法。
<property>        <name>mapred.map.output.compression.codec</name>        <value>org.apache.hadoop.io.compress.SnappyCodec</value></property>
  • 查看配置属性是否生效
hive> set io.compression.codecs;io.compression.codecs=        org.apache.hadoop.io.compress.DefaultCodec,        org.apache.hadoop.io.compress.GzipCodec,        org.apache.hadoop.io.compress.BZip2Codec,        org.apache.hadoop.io.compress.SnappyCodec

不同压缩的比较

# BZip2 压缩率最高, 但是同时需要消耗最多的CPU开销。# GZIP 是压缩率和压缩/解压缩上的下一个# Snappy 和 LZO 压缩率相比前两个来所药效但是压缩/解压缩速度要快, 特别是解压缩过程。# LZO 和 Bzip2 是块级的压缩, 所以文件可以划分块# GZIP 和 Snappy 文件不可分割。

3. 开启中间压缩

  • 中间压缩指的是 Map 到 Reduce 的中间过程启用压缩。
  • 对于中间数据压缩, 选择一个低CPU 开销的编/解码器要比选择一个高压缩率的编/解码器要重要的多。

HiveQL 语句最终会被编译成 Hadoop 的 Mapreduce job, 开启 Hive 中间数据压缩功能, 就是在 MapReduce 的shuffle 阶段对 mapper 产生的中间结果数据压缩

<property>    <name>hive.exec.compress.intermediate</name>    <value>true</value>    <description>This controls whether intermediate files produced by Hive between muilple map reduce job are comressed</description></property>

4. 对 Hive 最终输出结果压缩

  • 用户可以对最终生成的 Hive 表的数据进行压缩
  • 通过参数 hive.exec.compress.output 控制这一功能的激活或禁用。
<property>    <name>hive.exec.compress.output</name>    <value>true</value>    <description>            This controls whether the final outpus of a query(  to a local/hdfs file or a Hive table) is compress    </description></property>

说明

在输出结果进行压缩时, 文件的输出将以相应的压缩形式作为输出, 并且输出为相应压缩的后缀, 指明压缩类型。

0 0
原创粉丝点击