CompressedStorage

压缩数据存储

在某些情况下,将数据压缩在 Hive 表中的性能比未压缩的存储更好。在磁盘使用率和查询性能方面。

您可以将使用 Gzip 或 Bzip2 压缩的文本文件直接导入存储为 TextFile 的表中。在执行查询过程中,将自动检测压缩情况,并即时对文件进行解压缩。例如:

CREATE TABLE raw (line STRING)
   ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';

LOAD DATA LOCAL INPATH '/tmp/weblogs/20090603-access.log.gz' INTO TABLE raw;

表“原始”存储为 TextFile,这是默认存储。但是,在这种情况下,Hadoop 将无法将您的文件拆分为多个块/块,并不能并行运行多个 Map。这可能会导致群集的“Map”功能利用不足。

建议的做法是将数据插入另一个存储为 SequenceFile 的表中。 Hadoop 可以拆分 SequenceFile 并将其分布在 Map 作业中,而 GZIP 文件则不能。例如:

CREATE TABLE raw (line STRING)
   ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';

CREATE TABLE raw_sequence (line STRING)
   STORED AS SEQUENCEFILE;

LOAD DATA LOCAL INPATH '/tmp/weblogs/20090603-access.log.gz' INTO TABLE raw;

SET hive.exec.compress.output=true;
SET io.seqfile.compression.type=BLOCK; -- NONE/RECORD/BLOCK (see below)
INSERT OVERWRITE TABLE raw_sequence SELECT * FROM raw;

io.seqfile.compression.type 的值确定如何执行压缩。记录会分别压缩每个值,而 BLOCK 在压缩前会缓冲 1MB(默认)。

LZO Compression

有关将 LZO 与 Hive 一起使用的信息,请参见LZO Compression

首页