Hadoop Parquet Datastorewriter плохая производительность письма
Я пишу файлы Parquet, используя ParquetDatasetStoreWriter
класс и производительность я получаю очень плохо. Обычно поток следует так:
// First write
dataStoreWriter.write(entity #1);
dataStoreWriter.write(entity #2);
...
dataStoreWriter.write(entity #N);
// Then close
dataStoreWriter.close()
Проблема, как вы знаете, в том, что мой dataStoreWriter
один фасад, и настоящая письменная работа выполняется taskExecutor
и taskScheduler
, Эта работа может быть замечена этими сообщениями, подсказанными к стандартному выводу:
INFO: parquet.hadoop.ColumnChunkPageWriteStore: written 685B for [localId] BINARY: 300,000 values, ...
INFO: parquet.hadoop.ColumnChunkPageWriteStore: written 75B for [factTime] INT64: 300,000 values, ...
INFO: parquet.hadoop.ColumnChunkPageWriteStore: written 50B for [period] INT32: 300,000 values, ...
INFO: parquet.hadoop.ColumnChunkPageWriteStore: written 6,304B for [objectType] BINARY: 300,000 values, ...
Как вы можете видеть, я пишу 300K объектов на файл Parquet, что приводит к файлам размером около 700K на диске. Ничего особенного... Однако после одной или двух записей я получаю все меньше и меньше сообщений, подобных этим, и процесс останавливается...
Есть идеи о том, что может происходить? В Клодере все зеленое...
Используемые версии:
- Cloudera 5.11
- Java 8
- Spring Integration 4.3.12.RELEASE
- Spring Data Hadoop 2.2.0.RELEASE
Изменить: На самом деле, я изолировал запись файлов Parquet с помощью инструмента CLI Kite Dataset, и проблема заключается в производительности самого SKD. С использованием csv-import
командуя и загружая данные из CSV, я вижу, что мы пишем со скоростью 400 000 записей в минуту, что намного ниже, чем 15,0000 000 записей в минуту, которые мы пишем, отсюда и остановка...
Можете ли вы порекомендовать какой-либо способ улучшить этот уровень записи? Спасибо!