我有一个像
这样的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" );
要填充,我正在做类似的事情:
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";
这会构建一个新的分区,其中各个产品通过deflate压缩,但这里的理想选择是通过LZO压缩编解码器。
不幸的是,我不确定如何实现这一点,但我认为它是众多运行时设置中的一个,或者只是CREATE TABLE DDL中的另一行。
答案 0 :(得分: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;
通过检查:
确保您拥有所需的压缩编解码器io.compression.codecs
有关io.seqfile.compression.type的更多信息,请访问http://wiki.apache.org/hadoop/Hive/CompressedStorage
我可能会弄错,但似乎BLOCK类型可以确保以较高的比率压缩较大的文件而不是较小的较低压缩文件集。