Apache Nifi 1.7.1 PutHive3Streaming Hive 3.0-托管表压缩

时间:2018-10-24 13:47:02

标签: hive apache-nifi

我正在使用PutHive3Streaming将Nifi的Avro数据加载到Hive。作为示例,我向Nifi发送10 MB数据Json数据,将其转换为Avro(将大小减小为118 KB),并使用PutHive3Streaming写入托管的配置单元表。但是,我看到数据没有在配置单元中压缩。

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;

尽管如此,但Hive中未启用压缩。有任何指针可以启用此功能吗?

2 个答案:

答案 0 :(得分:1)

Hive不会压缩Streaming Data Ingest API插入的数据。
压缩运行时将对其进行压缩。
参见https://cwiki.apache.org/confluence/display/Hive/Streaming+Data+Ingest+V2#StreamingDataIngestV2-APIUsage

如果您不想等待,请使用ALTER TABLE your_table PARTITION(key=value) COMPACT "MAJOR"

答案 1 :(得分:0)

是的,到目前为止,@ K.M是正确的,需要使用压缩。

a)需要使用Hive压缩策略来管理数据的大小。仅在压缩之后才对数据进行编码。以下是自动压缩的默认属性。

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

b)尽管这是默认设置,但我进行压缩的挑战之一是,压缩清理程序无法在压缩之后(由压缩本身进行)访问nifi编写的delta文件(可删除)。我通过使用配置单元用户作为表所有者,并根据kerberos制定的标准为配置单元用户赋予了增量文件“权限”来解决此问题。

d)我继续面临的另一个挑战是触发自动压缩作业。在我的情况下,随着增量文件继续流式传输到给定表/分区的配置单元中,第一个主要压缩作业成功完成,删除了增量并创建了基本文件。但是在那之后,不会触发自动压缩作业。蜂巢会累积大量的增量文件。 (必须手动清理,<---不可取)