Конвейер Пример использования: Этот конвейер читает файлы json из 30 каталогов GCS, каждый день представлен в виде каталога, поэтому считывает данные за последние 30 дней (14 миллиардов строк).Выполняет некоторую обработку этих данных и выводит их в GCS в виде файлов json.
Проблема с горячими клавишами: Проблема с горячими клавишами возникает потому, что наша бизнес-логика требует гораздо больше обработки данных последних дней (~ 400 миллионов строк) относительно данных за последние 29 дней.Поэтому, если конвейер запущен сегодня, он будет считывать данные за прошлый месяц, данные за 30 дней до вчерашнего дня требуют минимальной обработки.В то время как сегодняшние данные требуют примерно 100-кратной дополнительной обработки.Поскольку мы обрабатываем все данные за прошлый месяц, включая сегодняшний, за один шаг, при обработке данных за сегодняшний день генерируется горячая клавиша
В конвейере, когда он первоначально запускается, я замечаю, что пропускная способность очень высокая (миллион строк вво-вторых) после того, как конвейер обработал данные за последние 29 дней и начинает обрабатывать сегодняшнюю пропускную способность, данные резко снижаются (количество строк в секунду).Поскольку поток данных назначает рабочие узлы для каждого входа (30 каталогов), ввод, который требует наибольшей обработки, останавливается, поскольку он не распараллелен для всех рабочих узлов.Хотя большинство рабочих узлов использовалось для обработки данных за 29 дней.
Решения были предприняты:
- Группирование и хеширование для создания тасования для смешивания строк с высокой обработкойс низкой обработкой (2018-05-02_02_24_23-2746349996700640181) шаг
GroupBy
при этом выполнялся настолько медленно, что производительность была наихудшей, чем с проблемой горячих клавиш. - Добавление
Reshuffle.createRandomKey
шага для создания тасования для смешивания высокой обработкистроки с низкой обработкой (2018-05-03_04_50_16-6027709731981798472) Шаг перестановки при этом выполнялся настолько медленно, что производительность была наихудшей, чем при проблеме горячих клавиш
Одним из распространенных предложений здесь является включение режима перемешивания.Мы пытались сделать это в прошлом.Хотя режим перемешивания улучшил производительность шага GroupByKey
, он резко снизил производительность при записи в GCS.