如何解决NiFi合并记录处理器在使用ParquetRecordSetWriter时未遵循最小存储箱大小
我正在尝试在NiFi(1.11.4)中构建一个流,该流从AMQ读取Avro消息,使用Merge Records处理器对其进行累积,然后将合并的实木复合地板文件写入HDFS。
问题是,当我尝试在合并记录处理器(与 AvroReader 结合使用)中使用 ParquetRecordSetWriter 时,合并的内容是从未根据“最小垃圾箱大小”阈值设置发出-我试图设置非常低的值-但这是行不通的。同时,Max Bin Age阈值也可以正常工作。
此外,如果我使用 AvroRecordSetWriter -最小大小阈值也可以。 因此,我尝试使用 AvroRecordSetWriter ,然后使用 PutParquet (或 ConvertAvroToParquet ),并遇到了另一个问题: 如果我为镶木地板文件设置了行组大小(例如128 MB),则永远不会写入小文件。
看起来它可以将内容缓冲在内存中,但实际上应该这样做吗?因为在我编写的用于测试 AvroParquetWriter 的简单Java程序中(基本上与NiFi使用的程序相同),我能够编写设置了巨大行组大小的小文件。
NiFi中是否存在与镶木地板书写有关的已知问题? 我对描述的行为非常困惑。 任何帮助表示赞赏。
谢谢。
解决方法
我在1.12.0上运行类似的流程,但是我以记录计数和最大存储箱寿命而不是最小存储箱大小发出信号。效果很好。在这里,可能对您有用的一件事是,我注意到Parquet输出在我们的数据集中非常一致地约为Avro二进制文件大小的50%。因此,如果您根据Avro估算出存储仓的大小,那么使用Parquet可能对您来说是错误的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。