数据压缩存储 可以将使用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; 表raw采用的是hive默认存储方式TextFile,但是这种情况下,hadoop不能将文件切分成块,并通过多个并行的map去运行,这样会导致集群的并行能力未充分利用。推荐的做法是将数据插入另一个表中,该表存储为SequenceFile。SequenceFile可以被Hadoop分割,并分布到各个map作业中,而GZIP文件则不能,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; type的值决定了如何执行压缩。Record单独压缩每个值,而BLOCK在压缩前缓冲1MB(默认)。