Apache ORC writer刷新内存

3
我们希望使用org.apache.orc.Writer创建ORC文件。我们的测试都很顺利,直到从一个包含blob-s的更大的数据库表中创建ORC文件。我们尝试更改以下设置,但它们都没有起作用:
org.apache.orc.OrcFile.WriterOptions:
bufferSize()
stripeSize()
blockSize()
enforceBufferSize()

Orc writer会获取所有的数据集,只有在完成后才将它们写出,这种行为会导致处理较大数据集时出现内存问题。是否有一种方法可以持续填充ORC文件(连续地从内存中刷新),而不是在关闭文件编写器时刷新数据?创建包含blob的数据源的ORC文件的最佳实践是什么,并且不能仅在内存中处理?

感谢您的阅读!

谢谢。 Tamas

1个回答

0

我知道这是一个非常老的问题,但我将给出我的解决方案,以便其他遇到相同问题的人参考。

事实证明,ORCWriter实现检查内存限制以在每n行后刷新缓冲区,但如果您的行足够大以在进行检查之前消耗整个内存,则会出现OOM错误。因此,您可以尝试设置更小的行计数来在内存检查/刷新之间切换。默认值为5000。

var configuration = new Configuration();
    configuration.set(OrcConf.ROWS_BETWEEN_CHECKS.getAttribute(), String.valueOf(1000));
    var options = OrcFile.writerOptions(configuration)
            .stripeSize(stripeSize)
            .setSchema(schema);

文档在这里: https://github.com/apache/orc/blob/fc6f6aee6571df6e53de5adba7cc0b2670c5df91/java/core/src/java/org/apache/orc/OrcConf.java#L165


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接