我正在使用puthive3streaming将avro数据从nifi加载到hive。对于一个示例,我将向nifi发送10mb数据json数据,将其转换为avro(将大小减少到118kb),并使用puthive3streaming写入一个托管配置单元表。但是,我看到数据在hive中没有被压缩。
hdfs dfs -du -h -s /user/hive/warehouse/my_table*
32.1 M /user/hive/warehouse/my_table (<-- replication factor 3)
在餐桌上,我有:
STORED AS ORC
TBLPROPERTIES (
'orc.compress'='ZLIB',
'orc.compression.strategy'='SPEED',
'orc.create.index'='true',
'orc.encoding.strategy'='SPEED',
'transactional'='true');
我还启用了:
hive.exec.dynamic.partition=true
hive.optimize.sort.dynamic.partition=true
hive.exec.dynamic.partition.mode=nonstrict
hive.optimize.sort.dynamic.partition=true
avro.output.codec=zlib
hive.exec.compress.intermediate=true;
hive.exec.compress.output=true;
尽管如此,在配置单元中似乎没有启用压缩。有什么指针可以启用它吗?
2条答案
按热度按时间5t7ly7z51#
是的,@k.m是正确的,因此需要使用压实。
a) 需要使用配置单元压缩策略来管理数据的大小。只有在压缩之后数据才被编码。下面是自动压缩的默认属性。
b) 尽管这是默认值,但我在压缩方面遇到的一个挑战是,nifi编写的delta文件不能被压缩清理器访问(可以删除)(在压缩本身之后)。我通过使用配置单元用户作为表所有者以及根据kerberos制定的标准授予配置单元用户对delta文件的“权限”来解决这个问题。
d) 我继续面临的另一个挑战是触发自动压缩作业。在我的例子中,随着增量文件继续流式传输到给定表/分区的配置单元中,第一个主要压缩作业成功完成,删除增量并创建一个基文件。但在这一点之后,不会触发自动压缩作业。Hive积累了大量的增量文件(必须手动清理(不可取)
rekjcdws2#
配置单元不压缩流数据摄取api插入的数据。
压实时它们会被压缩。
看到了吗https://cwiki.apache.org/confluence/display/hive/streaming+data+ingest+v2#streamingdataingestv2-API用法
如果你不想等,就用
ALTER TABLE your_table PARTITION(key=value) COMPACT "MAJOR"
.