Apache Beam/ Перестановка потока данных

Какова цель org.apache.beam.sdk.transforms.Reshuffle? В документации цель определяется как:

PTransform, который возвращает PCollection, эквивалентную его входному сигналу, но в рабочем состоянии обеспечивает некоторые побочные эффекты GroupByKey, в частности предотвращая слияние окружающих преобразований, контрольных точек и дедупликации по id.

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

1 ответ

Решение

Есть пара случаев, когда вы можете захотеть переставить ваши данные. Следующее не является исчерпывающим списком, но должно дать вам представление о том, почему вы можете переставлять:

Когда одно из ваших преобразований ParDo имеет очень большой размах

Это означает, что параллелизм увеличивается после вашего ParDo. Если вы не нарушите слияние, ваш конвейер не сможет разделить данные на несколько машин для их обработки.

Рассмотрим крайний случай DoFn, который генерирует миллион выходных элементов для каждого входного элемента. Учтите, что этот ParDo получает 10 элементов на входе. Если вы не нарушите слияние этого ParDo с большим разветвлением и его нисходящих преобразований, он сможет работать только на 10 машинах, хотя у вас будет миллионы элементов.

  • Хороший способ диагностировать это - посмотреть количество элементов во входной PCollection против количества элементов в выходной PCollection. Если последняя значительно больше первой, вы можете рассмотреть возможность добавления перестановки.

Когда ваши данные плохо сбалансированы по машинам **

Представьте, что ваш конвейер потребляет 9 файлов по 10 МБ и один файл по 10 ГБ. Если каждый файл читается на одной машине, у вас будет одна машина с намного большим количеством данных, чем другие.

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

  • Хороший способ диагностировать это - посмотреть, сколько рабочих выполняют работу в вашем конвейере. Если конвейер идет медленно, и только один работник обрабатывает данные, вы можете выиграть от перестановки.
Другие вопросы по тегам