Я использую Apache Beam 2.13.0 с GCP Data Runner.
У меня проблема с потоковой передачей в BigQuery из пакетного конвейера:
PCollection<BigQueryInsertError> stageOneErrors =
destinationTableSelected
.apply("Write BQ Attempt 1",
BigQueryIO.<KV<TableDestination, TableRow>>write()
.withMethod(STREAMING_INSERTS)
.to(new KVTableDestination())
.withFormatFunction(new KVTableRow())
.withExtendedErrorInfo()
.withFailedInsertRetryPolicy(InsertRetryPolicy.neverRetry())
.withCreateDisposition(CreateDisposition.CREATE_NEVER)
.withWriteDisposition(WriteDisposition.WRITE_APPEND))
.getFailedInsertsWithErr();
Ошибка:
Shutting down JVM after 8 consecutive periods of measured GC thrashing.
Memory is used/total/max = 15914/18766/18766 MB,
GC last/max = 99.17/99.17 %, #pushbacks=0, gc thrashing=true.
Heap dump not written.
Тот же код работает правильно в режиме потоковой передачи (если опущен параметр с явным методом).
Код работает с достаточно маленькими наборами данных (менее 2 миллионов записей). Сбой на 2,5 миллиона плюс.
На первый взгляд, это похоже на проблему, описанную здесь: Отключение JVM после 8 последовательных периодов измерения ГХ-обмолота
Создание отдельного вопроса для добавления дополнительных деталей.
Могу ли я что-нибудь сделать, чтобы это исправить? Похоже, проблема в самом компоненте BigQueryIO - ключ GroupBy не работает.