Поток данных BigQuery Insert Job мгновенно завершается неудачей с большим набором данных - PullRequest
0 голосов
/ 22 апреля 2019

Я спроектировал луч / конвейер потока данных, используя библиотеку луча Python.Конвейер примерно выполняет следующие действия:

  1. ParDo: сбор данных JSON из API
  2. ParDo: преобразование данных JSON
  3. 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.

1 Ответ

2 голосов
/ 22 апреля 2019

Единственное, что может помочь при отладке, - это просмотреть журналы Stackdriver.

Если вы откроете задание Поток данных в консоли Google и нажмете LOGS в правом верхнем углу графической панели, откроется панель журналов в нижней части. В правом верхнем углу панели LOGS есть ссылка на Stackdriver. Это даст вам много информации о ваших работниках / перестановках / и т.д. для этой конкретной работы.

В нем много всего, и может быть трудно отфильтровать то, что имеет значение, но, надеюсь, вы сможете найти что-то более полезное, чем A work item was attempted 4 times without success. Например, каждый работник иногда регистрирует, сколько памяти он использует, что можно сравнить с объемом памяти, который есть у каждого работника (в зависимости от типа машины), чтобы определить, действительно ли ему не хватает памяти или происходит ваша ошибка. в другом месте.

Удачи!

...