在同一个hive表上进行多次压缩

时间:2018-06-11 00:20:24

标签: hadoop hive hiveql hadoop2

我有一个按年/月分区的Hive表,它包含至少7年的数据。我想要做的是通过Snappy压缩最新的数据(比如1到1岁),但通过更好的压缩技术(如gzip等)来压缩旧数据。如何在Hive中执行此操作?

1 个答案:

答案 0 :(得分:0)

您可以使用不同的压缩设置覆盖不同的分区。 配置压缩编解码器,并使用此编解码器插入要压缩的分区。

对于快活:

set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec; 
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;

使用snappy编解码器覆盖分区:

--enable dynamic partitions
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

--use where conditions to limit new data only
insert overwrite table table_name partition(partition_key)
select * from table_name where partition_key <your condition here> ;

对于gzip,请使用GzipCodec:

set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec; 
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.GzipCodec;

使用gzipcodec覆盖分区:

--enable dynamic partitions
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

--use where conditions to limit OLD data only
insert overwrite table table_name partition(partition_key)
select * from table_name where partition_key <your condition here> ;

通过这种方式,您可以为不同的分区使用不同的压缩编解码器。在选择这些表时,您无需指定编解码器。 Hive会自动识别哪个编解码器应该用于解压缩。

当然,这不是关于ORC或镶木地板等自包含文件格式。它们可以有自己的压缩属性。例如orc.compress = SNAPPY