Apache nifi 使用ParquetRecordSetWriter时,NiFi合并记录处理器不符合最小存储箱大小

Apache nifi 使用ParquetRecordSetWriter时,NiFi合并记录处理器不符合最小存储箱大小,apache-nifi,avro,parquet,Apache Nifi,Avro,Parquet,我正在尝试在NiFi(1.11.4)中构建一个流,该流从AMQ读取Avro消息,使用合并记录处理器将它们累加,然后将合并的拼花文件写入HDFS 问题是,当我试图在合并记录处理器中使用ParquetRecordSetWriter时(与AvroReader一起使用),合并内容永远不会基于最小存储箱大小阈值集发出-我试图设置非常低的值-它根本不起作用。同时,最大仓位年龄阈值工作正常 此外,如果我使用AvroRecordSetWriter,最小大小阈值也可以正常工作。 因此,我尝试使用AvroRecor

我正在尝试在NiFi(1.11.4)中构建一个流,该流从AMQ读取Avro消息,使用合并记录处理器将它们累加,然后将合并的拼花文件写入HDFS

问题是,当我试图在合并记录处理器中使用ParquetRecordSetWriter时(与AvroReader一起使用),合并内容永远不会基于最小存储箱大小阈值集发出-我试图设置非常低的值-它根本不起作用。同时,最大仓位年龄阈值工作正常

此外,如果我使用AvroRecordSetWriter,最小大小阈值也可以正常工作。 因此,我尝试使用AvroRecordSetWriter,然后使用PutParquet(或ConvertAvroToParquet)并面临另一个问题: 如果我为拼花地板文件设置行组大小(例如128MB),则不会写入小文件

看起来它在内存中缓冲内容,但它真的应该这样做吗?因为在我为测试AvroParquetWriter而编写的简单Java程序中(本质上与NiFi使用的程序相同),我能够编写具有巨大行组大小集的小文件

在NiFi中是否存在与拼花地板书写相关的任何已知问题? 我对所描述的行为感到非常困惑。 感谢您的帮助


提前感谢。

我在1.12.0上运行类似的流,但我在记录计数和最大仓位年龄,而不是最小仓位大小。很好用。在这里,有一件事可能会对你起作用,那就是我注意到,在我们的数据集中,拼花地板的输出大约是Avro二进制的50%,这是非常一致的。所以,如果你根据Avro来猜测箱子内存的大小,那么使用拼花地板可能是错误的