在同一个配置单元表上进行多次压缩

h6my8fg2  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(300)

我有一个按年/月划分的配置单元表,它包含至少7年的数据。我想做的是通过snappy压缩最新的数据(比如1年前的数据),但是通过gzip等更好的压缩技术压缩较旧的数据。如何在hive中执行此操作?

huwehgph

huwehgph1#

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

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,请使用gzip代码:

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

使用gzip代码覆盖分区:

--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> ;

这样,您就可以为不同的分区使用不同的压缩编解码器。在选择这些表时,不需要指定编解码器。配置单元将自动识别应用于解压缩的编解码器。
当然,这不是关于像orc或parquet这样的自包含文件格式。它们可以有自己的压缩特性。例如orc.compress=snappy

相关问题