Поделиться через


Автоматическое масштабирование пулов Apache Spark в Azure Synapse Analytics

Компонент автомасштабирования пулов Apache Spark для Azure Synapse Analytics автоматически масштабирует количество узлов в экземпляре кластера в большую и меньшую сторону. Во время создания нового пула Apache Spark для Azure Synapse Analytics можно задать минимальное и максимальное количество узлов до 200 узлов при выборе автомасштабирования. Автомасштабирование отслеживает требования к ресурсам, зависящие от нагрузки, и масштабирует количество узлов соответствующим образом. За использование этой функции дополнительная плата не взимается.

Мониторинг метрик

Компонент автомасштабирования постоянно выполняет мониторинг кластера и собирает следующие метрики:

Метрическая Description
Total Pending CPU (Общее число ожидающих ЦП) Общее число ядер, необходимое для запуска выполнения всех ожидающих заданий.
Total Pending Memory (Общий объем ожидающей памяти) Общий объем памяти (в МБ), необходимый для запуска выполнения всех ожидающих заданий.
Total Free CPU (Общее число свободных ЦП) Сумма всех неиспользуемых ядер на активных узлах.
Total Free Memory (Общий объем свободной памяти) Суммарный объем неиспользуемой памяти (в МБ) на активных узлах.
Used Memory per Node (Объем используемой памяти на каждом узле) Нагрузка на узел. Узел, на котором используется 10 ГБ памяти, пребывает под большей нагрузкой, чем узел с 2 ГБ используемой памяти.

Эти метрики проверяются каждые 30 секунд. Компонент автомасштабирования увеличивает и уменьшает масштаб на основе этих метрик.

Условия масштабирования на основе нагрузки

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

Вертикальное масштабирование Вертикальное уменьшение масштаба
Общее число ожидающих ЦП больше, чем общее число свободных ЦП в течение более чем 1 минуты. Общее число ожидающих ЦП меньше, чем общее число свободных ЦП в течение более чем 2 минут.
Общий объем ожидающей памяти больше, чем общее число свободной памяти в течение более чем 1 минуты. Общий объем ожидающей памяти меньше, чем общий объем свободной памяти в течение более чем 2 минут.

Для увеличения масштаба служба автомасштабирования Azure Synapse вычисляет, сколько новых узлов нужно для удовлетворения текущих требований к ЦП и памяти, а затем выдает запрос на увеличение масштаба, чтобы добавить необходимое число узлов.

Для уменьшения масштаба служба автомасштабирования выдает запрос на удаление определенного количества узлов в зависимости от количества исполнителей, количества владельцев приложений на узел, текущих требований к ЦП и памяти. Служба также определяет, какие узлы являются кандидатами на удаление в зависимости от текущего состояния выполнения задания. При вертикальном уменьшении масштаба сначала узлы выводятся из эксплуатации, а затем они удаляются из кластера.

Примечание.

Примечание об обновлении и принудительном применении конфигурации автомасштабирования к существующему пулу Spark. Если включен новый параметр в портал Azure или ForceApplySetting PowerShell, все существующие сеансы Spark завершаются и изменения конфигурации применяются немедленно. Если этот параметр не выбран, конфигурация применяется к новым сеансам Spark и существующим сеансам не завершается.

Начать

Создание бессерверного пула Apache Spark с автомасштабированием

Чтобы включить компонент автомасштабирования, выполните следующие действия как часть обычного процесса создания пула.

  1. На вкладке Основные сведения установите флажок Включить автомасштабирование.

  2. Введите нужные значения для следующих свойств:

    • Мин. — минимальное количество узлов.
    • Макс. — максимальное количество узлов.

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

При необходимости можно включить динамическое выделение исполнителей в сценариях, где требования к исполнителю значительно отличаются на разных этапах задания Spark или периодически колеблется объем обработанных данных. Включив динамическое выделение исполнителей, можно использовать емкость по необходимости.

При включении динамического выделения количество исполнителей в задаче может масштабироваться в указанном диапазоне от минимального до максимального числа исполнителей.

Apache Spark позволяет настраивать динамическое выделение исполнителей с помощью кода, как показано ниже:

    %%configure -f
    {
        "conf" : {
            "spark.dynamicAllocation.maxExecutors" : "6",
            "spark.dynamicAllocation.enabled": "true",
            "spark.dynamicAllocation.minExecutors": "2"
     }
    }

Значения по умолчанию, заданные с помощью кода, переопределяют значения, заданные через пользовательский интерфейс.

В этом примере если для задания требуется только 2 исполнителя, он будет использовать только 2 исполнителя. Если задание требует большего количества, оно масштабируется до 6 исполнителей (1 драйвер, 6 исполнителей). Если задание не нуждается в исполнителях, оно выведет их из эксплуатации. Если ему не нужен узел, он освободит узел.

Примечание.

Параметр maxExecutors зарезервирует настроенное количество исполнителей. Учитывая этот пример, даже если вы используете только 2, он зарезервирует 6.

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

Рекомендации

Учитывайте задержку операций вертикального увеличения или уменьшения масштаба

Выполнение операции масштабирования может занять от 1 до 5 минут.

Подготовка к вертикальному уменьшению масштаба

Во время вертикального уменьшения масштаба экземпляра компонент автомасштабирования переместит узлы в состояние списания, чтобы новые исполнители не могли запуститься на этих узлах.

Выполняемые задания будут по-прежнему выполняться и завершаться. Ожидающие задания будут ожидать включения в расписания в обычном порядке с меньшим количеством доступных узлов.

Примечание.

По умолчанию для spark.yarn.executor.decommission.enabled задано значение true, что позволяет автоматически завершить работу недоиспользуемых узлов для оптимизации эффективности вычислений. Если предпочтителен менее агрессивный масштабирование, эта конфигурация может быть задана как false.

Следующие шаги

Краткое руководство по настройке нового пула Spark: Создание пула Spark