Первый шаг конвейера потока данных, который мы делаем, - это чтение 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, или здесь что-то еще происходит?
Заранее благодарен за любую помощь!
Редактировать -Был в состоянии решить эту проблему с помощью большого количества экспериментов.
Причина, по которой время стены, похоже, идет вспять, похоже, имеет отношение к сбоям рабочих, когда им не хватает памяти, пытаясь обработать некоторые горячие клавиши.После этого аварийные работники перестают сообщать, и это, похоже, сокращает время, затрачиваемое на выполнение задач.
В целом, мы решили проблему с помощью комбинации вещей:
- Мы продвинули столько же логикикак мы могли из GroupBy и в легкие комбайнеры.
- Мы ограничили количество GroupBys в целом.
- Мы добавили использование Shuffle Mode, который, похоже, помог с некоторыми из chokepoint GroupBys.
Надеюсь, это поможет кому-то еще, кто сталкивается с этой проблемой.