托管表压缩

des4xlb0  于 2021-06-27  发布在  Hive
关注(0)|答案(2)|浏览(375)

我正在使用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;

尽管如此,在配置单元中似乎没有启用压缩。有什么指针可以启用它吗?

5t7ly7z5

5t7ly7z51#

是的,@k.m是正确的,因此需要使用压实。
a) 需要使用配置单元压缩策略来管理数据的大小。只有在压缩之后数据才被编码。下面是自动压缩的默认属性。

hive.compactor.delta.num.threshold=10
hive.compactor.delta.pct.threshold=0.1

b) 尽管这是默认值,但我在压缩方面遇到的一个挑战是,nifi编写的delta文件不能被压缩清理器访问(可以删除)(在压缩本身之后)。我通过使用配置单元用户作为表所有者以及根据kerberos制定的标准授予配置单元用户对delta文件的“权限”来解决这个问题。
d) 我继续面临的另一个挑战是触发自动压缩作业。在我的例子中,随着增量文件继续流式传输到给定表/分区的配置单元中,第一个主要压缩作业成功完成,删除增量并创建一个基文件。但在这一点之后,不会触发自动压缩作业。Hive积累了大量的增量文件(必须手动清理(不可取)

rekjcdws

rekjcdws2#

配置单元不压缩流数据摄取api插入的数据。
压实时它们会被压缩。
看到了吗https://cwiki.apache.org/confluence/display/hive/streaming+data+ingest+v2#streamingdataingestv2-API用法
如果你不想等,就用 ALTER TABLE your_table PARTITION(key=value) COMPACT "MAJOR" .

相关问题