Google Dataflow - цифры выхода Wall Time / PCollection идут в обратном направлении - PullRequest
0 голосов
/ 26 февраля 2019

Первый шаг конвейера потока данных, который мы делаем, - это чтение BigQuery с использованием Python Beam API.

beam.io.Read(
  beam.io.BigQuerySource(
    project=google_project,
      table=table_name,
      dataset=big_query_dataset_id
    )
)

В рассматриваемой таблице 9 миллиардов + строк.

ЭтоПохоже, что задания экспорта, которые запускаются в результате этого вызова, заканчиваются очень быстро - обычно между 3-5 минутами с ожидаемым объемом данных в формате * .avro в папке для потока данных для чтения.

Однакокогда мы действительно выполняем это, кажется, что все работает нормально в течение 10-20 минут с первым шагом, считывающим данные в PCollection - мы можем видеть, как увеличивается время стены, увеличивается число элементов, добавляемых в коллекцию Output на этом шаге,и работники расширяются, чтобы помочь.

Однако по прошествии определенного периода времени (обычно около 1 миллиарда элементов или строк данных) время и количество элементов стены начинают неуклонно уменьшаться ,Часы vCPU продолжают увеличиваться с ожидаемой скоростью, что означает, что мы все еще работаем каким-то образом / все еще платим за процессорное время, но время простоя продолжает уменьшаться, а количество выводов / элементов PCollection продолжает стремиться к нулю.Это довольно странно - мы не можем сказать, что что-то не так из журналов (по крайней мере, кажется, что-то работает?), Но, учитывая количество требуемых работников / стоимость, мы действительно хотели бы видеть доказательства того, что вещидвижемся вперед.

Я даже усомнился в том, что, возможно, на уровне браузера происходило что-то сумасшедшее, но я могу подтвердить поведение разных браузеров и даже разных людей, смотрящих на одну и ту же работу..

Кто-нибудь когда-либо видел это раньше, и если да, то что это вызывает?Это просто ошибка в отображении / графике шага, которую предоставляет Dataflow, или здесь что-то еще происходит?

Заранее благодарен за любую помощь!

Редактировать -Был в состоянии решить эту проблему с помощью большого количества экспериментов.

Причина, по которой время стены, похоже, идет вспять, похоже, имеет отношение к сбоям рабочих, когда им не хватает памяти, пытаясь обработать некоторые горячие клавиши.После этого аварийные работники перестают сообщать, и это, похоже, сокращает время, затрачиваемое на выполнение задач.

В целом, мы решили проблему с помощью комбинации вещей:

  1. Мы продвинули столько же логикикак мы могли из GroupBy и в легкие комбайнеры.
  2. Мы ограничили количество GroupBys в целом.
  3. Мы добавили использование Shuffle Mode, который, похоже, помог с некоторыми из chokepoint GroupBys.

Надеюсь, это поможет кому-то еще, кто сталкивается с этой проблемой.

...