Apache Beam - Какие ключевые концепции для написания эффективных конвейеров обработки данных я должен знать? - PullRequest
0 голосов
/ 21 сентября 2019

Я уже некоторое время использую Beam, и мне хотелось бы знать, каковы ключевые концепции написания эффективных и оптимизированных конвейеров Beam.

У меня есть небольшой опыт работы с Spark, и я знаю, что мыможет предпочесть использовать reduByKey вместо groupByKey, чтобы избежать перетасовки и оптимизации сетевого трафика.

Это то же самое для Beam?

Буду признателен за некоторые советы или материалы / лучшие практики.

1 Ответ

4 голосов
/ 23 сентября 2019

Некоторые пункты для рассмотрения:

Особенности графического дизайна:

  • Filer first;поместите операции фильтра как можно выше в DAG)

  • Объединить рано;Если есть выбор, когда комбинировать, сделайте это как можно раньше.

  • Если возможно, уменьшите эффект больших раздвижных окон, используя меньшие фиксированные окна перед большим раздвижным окном.FixedWindow.of (1м) |Объединить |SlidingWindow.of (6 часов)

  • Большинство бегунов будут поддерживать слияние графиков, что является правильным в 99% случаев.Но в случае масштабного преобразования разветвления вы должны нарушить слияние.

Кодеры

  • Выберите кодеры, которые обеспечивают хорошую производительность, например, в Java используют что-то вродеПрото или Авро кодер, а не сериализация Java по умолчанию.
  • Расширенный совет: кодирование / декодирование является большим источником накладных расходов.Таким образом, если у вас есть большой двоичный объект, но вам нужна только его структурированная часть, вы можете выборочно декодировать только эту часть.

Ведение журнала

  • Избегайте использования Log.info на уровне элементов, это редко имеет значение и является основной причиной многих проблем, связанных с производительностью.

Data Skew

  • Понимание набора данных и значения горячих клавиш.Поля, которые используются в качестве ключей, которые могут иметь значение Nullable, часто являются виновными ... При необходимости используйте подсказки параллелизма withFanOut
  • Расширенный Совет: Иногда вы можете комбинировать ключ с окном элемента{key, Window}, чтобы помочь с распределением работы подробнее

Источники, приемники и внешние системы

  • Сжатые файлы можно легко прочитать с помощью флага опции, однакоБез Offset TextIO нельзя распространять эту задачу.Если у вас есть очень большие файлы для чтения, распаковка файла перед запуском конвейера может обеспечить хороший прирост производительности.Также обратите внимание на использование таких форматов, как сжатый Avro.

    • BackPressure: бегунки лучей предназначены для быстрого жевания при параллельной работе.Для достижения этой цели они могут раскручивать множество потоков на многих машинах.Это может легко затопить внешние системы, особенно если вы делаете вызов RPC для каждого элемента.Если внешняя система не может быть масштабирована, создайте партии, используя startBundle / finishBundle, чтобы помочь увеличить количество вызовов в секунду

    • Скорость света, все равно скорость света ..:-) Не используйте приемники и источники, которые находятся далеко от ваших работников.

Metrics

  • Используйте метрики Beam для инструментовваши трубопроводы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...