apache beam avroio读取大文件oom

epfja78i  于 2021-05-27  发布在  Spark
关注(0)|答案(0)|浏览(335)

问题:

我正在编写一个apachebeam管道来将avro文件转换为parquet文件(使用sparkrunner)。一切都很好,直到我开始转换大尺寸的avro文件(15g)。
用于读取avro文件以创建pcolletion的代码:

PCollection<GenericRecord> records =
                p.apply(FileIO.match().filepattern(s3BucketUrl + inputFilePattern))
                        .apply(FileIO.readMatches())
                        .apply(AvroIO.readFilesGenericRecords(inputSchema));

我的entrypoint shell脚本中的错误消息是:
b'/app/entrypoint.sh:line 42:8终止java-xx:maxram=${max\u ram}-xx:maxramfraction=1-cp/usr/share/tink analytics avro to parquet/avro-to-parquet-deploy-task.jar

假设

经过一些调查,我怀疑上面的avroio代码试图将整个avro文件作为一个分区加载,从而导致oom问题。
我的一个假设是:如果我在读取avro文件时可以指定分区的数量,比如100个分区,那么每个分区将只包含150m的数据,这应该可以避免oom问题。

我的问题是:

这个假设是否把我引向了正确的方向?
如果是这样,那么在读取avro文件时如何指定分区数?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题