Apache Beam AvroIO читает большой файл OOM - PullRequest
0 голосов
/ 27 мая 2020

Проблема:

Я пишу конвейер Apache Beam для преобразования файла Avro в файл Parquet (с помощью Spark runner). Все работает хорошо, пока я не начну конвертировать файл Avro большого размера (15 ГБ).

Код, используемый для чтения файла Avro для создания PColletion:

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

Сообщение об ошибке из моего сценария оболочки точки входа это:

b '/ app / entrypoint. sh: строка 42: 8 убито java -XX: MaxRAM = $ {MAX_RAM} -XX: MaxRAMFraction = 1 -cp / usr / share / tink-analytics-avro-to-parquet / avro-to-parquet-deploy-task.jar

Гипотеза

После некоторого расследования я подозреваю, что приведенный выше код AvroIO попробуйте загрузить весь файл Avro как один раздел, что вызывает проблему OOM.

У меня есть одна гипотеза: если я могу указать количество разделов при чтении файла Avro, давайте, например, увидим 100 разделов, тогда каждый раздел будет содержать только 150 МБ данных, что должно избежать проблемы OOM.

Мои вопросы:

  1. В правильном ли направлении меня ведет эта гипотеза?
  2. Если да, то как я могу указать количество разделов при чтении файла Avro?
...