在Hive中为INSERT OVERWRITE SELECT指定压缩编解码器

Dav*_*vid 6 compression configuration hadoop hive

我有一个蜂巢表

  CREATE TABLE beacons
 (
     foo string,
     bar string,
     foonotbar string
 )
 COMMENT "Digest of daily beacons, by day"
 PARTITIONED BY ( day string COMMENt "In YYYY-MM-DD format" );
Run Code Online (Sandbox Code Playgroud)

为了填充,我做的事情如下:

 SET hive.exec.compress.output=True;
 SET io.seqfile.compression.type=BLOCK;

 INSERT OVERWRITE TABLE beacons PARTITION ( day = "2011-01-26" ) SELECT
   someFunc(query, "foo") as foo,
   someFunc(query, "bar") as bar,
   otherFunc(query, "foo||bar") as foonotbar
   )
  FROM raw_logs
WHERE day = "2011-01-26";
Run Code Online (Sandbox Code Playgroud)

这会构建一个新的分区,通过deflate压缩各个产品,但这里的理想选择是通过LZO压缩编解码器.

不幸的是,我不确定如何实现这一点,但我认为它是众多运行时设置中的一个,或者可能只是CREATE TABLE DDL中的另一行.

Dav*_*vid 14

在INSERT OVERWRITE前加上以下运行时配置值之前:

SET hive.exec.compress.output=true; 
SET io.seqfile.compression.type=BLOCK;
SET mapred.output.compression.codec = com.hadoop.compression.lzo.LzopCodec;
Run Code Online (Sandbox Code Playgroud)

还要检查以下内容,确保您拥有所需的压缩编解码器:

io.compression.codecs
Run Code Online (Sandbox Code Playgroud)

有关io.seqfile.compression.type的更多信息,请访问http://wiki.apache.org/hadoop/Hive/CompressedStorage

我可能错了,但似乎BLOCK类型可以确保以较高的比率压缩较大的文件而不是较小的较低压缩文件集.