Hive中间结果和结果的压缩

Hadoop中常见的压缩格式及特性如下:

压缩格式 工具 算法 文件扩展名 多文件 可分割性
DEFLATE* 无 DEFLATE .deflate 不 不
Gzip gzip DEFLATE .gz 不 不
ZIP zip DEFLATE .zip 是 是,在文件范围内
bzip2 bzip2 bzip2 .bz2 不 是
LZO lzop LZO .lzo 不 不

首先hive作业结果最好使用sequencefile,因为textfile是没有压缩的。

使用sequencefile很简单,只要在建表的时候用:

stored as seqeuncefile

声明就可以。

注意如果是用create table as语句,它会读取hive-site.xml里的默认格式(默认是textfile)。

sequencefile有三种压缩方式:NONE, RECORD, BLOCK。默认是启用RECORD级的压缩的, 这种方式的压缩率是非常低的。因此建议开启BLOCK压缩。
配置如下:

hadoop-site.xml配置:

<property>
  <name>mapred.output.compression.type</name>
  <value>BLOCK</value>
  <description> </description>
</property>

<property>
  <name>io.seqfile.compressioin.type</name>
  <value>BLOCK</value>
  <description> </description>
</property>

然后配置:

<property>
  <name>mapred.output.compress</name>
  <value>true</value>
  <description>Should the job outputs be compressed?
  </description>
</property>
<property>
  <name>mapred.output.compression.codec</name>
  <value>org.apache.hadoop.io.compress.LzoCodec</value>
  <description>If the job outputs are compressed, how should they be compressed?
  </description>
</property>或在hive-site.xml中配置:
<property>
  <name>hive.exec.compress.output</name>
  <value>true</value>
  <description>Should the job outputs be compressed?
  </description>
</property>之后我们就可以配置输出结果的压缩方式了,默认是使用zlib,即org.apache.hadoop.io.compress.DefaultCodec。
我们可以改成其他的,比如速度比较快的lzo。

需要注意的是,lzo在0.19.1中是存在的,但是在0.20之后,因为许可证问题被移除了,是需要单独安装的。

首先需要添加lzo codec,在hadoop-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.LzoCodec</value>
  <description>A list of the compression codec classes that can be used
               for compression/decompression.</description>
</property>
其他的压缩配置按照上面的写就OK。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/f37ce9d7e7dcbd6076676d8e2050a71e.html