Проблема:
Я пишу конвейер 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.
Мои вопросы:
- В правильном ли направлении меня ведет эта гипотеза?
- Если да, то как я могу указать количество разделов при чтении файла Avro?