On this page
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。