Динамическое масштабирование задания Cloud Dataflow - PullRequest
2 голосов
/ 25 октября 2019

У меня есть конвейер Cloud Dataflow, который выглядит следующим образом:

  1. Чтение из Cloud Bigtable
  2. Выполнение некоторых преобразований
  3. Запись в GCS

Изначально без установки максимального количества работников автоматическое масштабирование потока данных масштабировалось бы до максимального значения (1000 узлов) и создавало ОЧЕНЬ большое напряжение для нашего кластера Bigtable. Затем я определил несколько maxNumWorkers, чтобы сказать 100, и это нормально, и это не создает никакой сумасшедшей нагрузки на наш кластер Bigtable, и этап 1 обычно заканчивается быстро (чтение из Bigtable);но шаги 2 и 3 только с 100 узлами занимают значительно больше времени. Могу ли я в любом случае динамически изменить maxNumWorkers после первого этапа? Я вижу применение (Wait.on), но не знаю, как его использовать. Моя лучевая работа выглядит следующим образом:

pipeline
 .apply("Read Bigtable",...)
 .apply("Transform", ...)
 .apply("Partition&Write", ...)

Я ищу способ ожидания .apply ("Read Bigtable", ...) длязакончите, затем увеличьте maxNumWorkers . По сути, мой первый этап связан с вводом-выводом, и мне не нужны ЦП (рабочие), но мои последующие этапы связаны с ЦП, и мне нужно больше ЦП (рабочих).

1 Ответ

0 голосов
/ 26 октября 2019

Пытались ли вы использовать сегментирование файлов для управления параллелизмом:

1) оставьте значение maxWorker равным 1000 2) сразу после чтения из bigtable сохраните данные в кегле 100 100 3) Загрузите данные снова,делать обработку, но для окончательных результатов мы пишем в шардинг 1000.

Я не могу гарантировать, но это стоит попробовать.

...