Я спроектировал луч / конвейер потока данных, используя библиотеку луча Python.Конвейер примерно выполняет следующие действия:
- ParDo: сбор данных JSON из API
- ParDo: преобразование данных JSON
- I / O: запись преобразованных данных в BigQueryТаблица
Обычно код выполняет то, что должен делать.Однако при сборе большого набора данных из API (около 500 000 файлов JSON) задание вставки bigquery останавливается вправо (= в течение одной секунды) после того, как оно было запущено без специального сообщения об ошибке при использовании DataflowRunner (он работает с DirectRunner, выполненным на моем компьютере).компьютер).При использовании меньшего набора данных все работает просто отлично.
Журнал потока данных выглядит следующим образом:
2019-04-22 (00:41:29) Executing BigQuery import job "dataflow_job_14675275193414385105". You can check its status with the...
Executing BigQuery import job "dataflow_job_14675275193414385105". You can check its status with the bq tool: "bq show -j --project_id=X dataflow_job_14675275193414385105".
2019-04-22 (00:41:29) Workflow failed. Causes: S01:Create Dummy Element/Read+Call API+Transform JSON+Write to Bigquery /Wr...
Workflow failed. Causes: S01:Create Dummy Element/Read+Call API+Transform JSON+Write to Bigquery /WriteToBigQuery/NativeWrite failed., A work item was attempted 4 times without success. Each time the worker eventually lost contact with the service. The work item was attempted on:
beamapp-X-04212005-04211305-sf4k-harness-lqjg,
beamapp-X-04212005-04211305-sf4k-harness-lgg2,
beamapp-X-04212005-04211305-sf4k-harness-qn55,
beamapp-X-04212005-04211305-sf4k-harness-hcsn
Использование инструмента bq cli, как предлагается, для получения дополнительной информации о задании загрузки BQ неРабота.Задание не может быть найдено (и я сомневаюсь, что оно вообще было создано из-за мгновенного сбоя).
Полагаю, я столкнулся с каким-то ограничением квоты / bq или даже с проблемой нехватки памяти (см .:https://beam.apache.org/documentation/io/built-in/google-bigquery/)
Ограничения В настоящее время BigQueryIO имеет следующие ограничения.
Вы не можете чередовать завершение записи BigQuery с другими шагами> вашего конвейера.
Если вы используете Beam SDK для Python, у вас могут возникнуть проблемы с размером импорта> проблемы, если вы пишете очень большой набор данных. В качестве обходного пути вы можете разделить> набор данных (например, используя преобразование Разделения Beam) инаписать в> несколько таблиц BigQuery. Beam SDK для Java не имеет этого> ограничения, поскольку оно разбивает ваш набор данных на вас.
Буду признателен за любую подсказку о том, как сузить основную причину дляэта проблема.
Я также хотел бы попробовать Partition Fn, но не нашел примеров исходного кода на python, как написать секционированную коллекцию в BigQТаблицы uery.