Управление ресурсами для кластера Apache Spark в Azure HDInsight

Узнайте, как получать доступ к разным интерфейсам, связанным с кластером Spark, включая пользовательский интерфейс Apache Ambari, пользовательский интерфейс Apache Hadoop YARN и сервер журнала Apache Spark, и как настроить конфигурацию кластера для оптимальной производительности.

Открытие сервера журнала Spark

Сервер журнала Spark — это пользовательский веб-интерфейс для готовых и запущенных приложений Spark. Он представляет собой расширение для пользовательского веб-интерфейса Spark. Полные сведения см. в статье о сервере журнала Spark.

Открытие пользовательского интерфейса YARN

Вы можете использовать пользовательский интерфейс YARN для мониторинга приложений, которые выполняются в кластере Spark в настоящее время.

  1. Откройте кластер Spark на портале Azure. Дополнительные сведения см. в разделе Отображение кластеров.

  2. На панелях мониторинга кластеров выберите Yarn. При появлении запроса введите учетные данные администратора для кластера Spark.

    Launch YARN UI.

    Совет

    Также пользовательский интерфейс YARN можно открыть из пользовательского интерфейса Ambari. В пользовательском интерфейсе Ambari перейдите к YARN>Быстрые ссылки>Активные>Пользовательский интерфейс Диспетчера ресурсов.

Оптимизация кластеров для приложений Spark

В зависимости от требований приложения можно изменять три основных параметра Spark: spark.executor.instances, spark.executor.cores и spark.executor.memory. Исполнитель — это процесс, запущенный для приложения Spark. Он выполняется на рабочем узле и отвечает за выполнение задач этого приложения. Число исполнителей по умолчанию и размеры исполнителя для каждого кластера определяются с учетом числа рабочих узлов и размера каждого рабочего узла. Эти сведения хранятся в файле spark-defaults.conf на головных узлах кластера.

Эти три параметра конфигурации можно настроить на уровне кластера (для всех приложений, работающих в кластере) или для каждого отдельного приложения.

Изменение параметров с помощью пользовательского интерфейса Ambari

  1. В пользовательском интерфейсе Ambari перейдите к Spark2>Конфигурации>Custom spark2-defaults.

    Set parameters using Ambari custom.

  2. Значения по умолчанию позволяют запустить в кластере одновременно четыре приложения Spark. Вы можете изменять эти значения из пользовательского интерфейса, как показано на следующем снимке экрана:

    Set parameters using Ambari.

  3. Чтобы сохранить изменения конфигурации, нажмите кнопку Сохранить. В верхней части страницы вы увидите предложение перезапустить все затронутые службы. Выберите Перезапустить.

    Restart services.

Изменение параметров для приложения, запущенного в Jupyter Notebook

Чтобы изменить конфигурацию для приложений, запущенных в Jupyter Notebook, можно использовать магическую команду %%configure. Желательно вносить такие изменения в начале приложения, перед запуском первой ячейки кода. Это гарантирует, что конфигурация будет применена к сеансу Livy, когда он будет создан. Если вы хотите изменить конфигурацию на более позднем этапе выполнения приложения, следует использовать параметр -f . Но при этом будут потеряны все результаты, полученные в приложении.

В следующем фрагменте кода показано, как изменить конфигурацию для приложения, работающего в Jupyter.

%%configure
{"executorMemory": "3072M", "executorCores": 4, "numExecutors":10}

Параметры конфигурации следует передавать в виде строки JSON, расположенной сразу после команды magic, как показано в столбце примера.

Изменение параметров для приложения, отправленного с помощью spark-submit

Следующая команда демонстрирует, как можно изменять параметры конфигурации для приложения пакетной службы, отправленного с помощью spark-submit.

spark-submit --class <the application class to execute> --executor-memory 3072M --executor-cores 4 –-num-executors 10 <location of application jar file> <application parameters>

Изменение параметров для приложения, отправленного с помощью cURL

В следующей команде показано, как изменить параметры конфигурации для приложения пакетной службы, отправленного с помощью cURL.

curl -k -v -H 'Content-Type: application/json' -X POST -d '{"file":"<location of application jar file>", "className":"<the application class to execute>", "args":[<application parameters>], "numExecutors":10, "executorMemory":"2G", "executorCores":5' localhost:8998/batches

Примечание.

Скопируйте JAR-файл в учетную запись хранения кластера. Не копируйте JAR-файл непосредственно на головной узел.

Изменение этих параметров на сервере Thrift Spark

Сервер Thrift Spark предоставляет доступ JDBC и ODBC к кластеру Spark. Разные средства, такие как Power BI, Tableau и др., используют протокол ODBC для обмена данными с сервером Thrift Spark и выполнения запросов Spark SQL в виде приложения Spark. Когда вы создаете кластер Spark, запускаются два экземпляра сервера Thrift Spark, по одному на каждый головной узел. Каждый сервер Thrift Spark отображается в пользовательском интерфейсе YARN как приложение Spark.

Сервер Thrift Spark использует динамическое выделение исполнителей Spark, поэтому spark.executor.instances не используется. Вместо этого сервер Thrift Spark использует spark.dynamicAllocation.maxExecutors и spark.dynamicAllocation.minExecutors, чтобы указать число исполнителей. Параметры конфигурации spark.executor.cores и spark.executor.memory используются для изменения размера исполнителя. Эти параметры можно изменить, как описано ниже.

  • Разверните категорию Advanced spark2-thrift-sparkconf, чтобы обновить параметры spark.dynamicAllocation.maxExecutors и spark.dynamicAllocation.minExecutors.

    Configure Spark thrift server.

  • Разверните категорию Custom spark2-thrift-sparkconf, чтобы обновить параметры spark.executor.cores и spark.executor.memory.

    Configure Spark thrift server parameter.

Изменение памяти драйверов для сервера Thrift Spark

Память драйверов сервера Thrift Spark настроена так, что она использует 25 % от размера ОЗУ головного узла, при условии, что общий объем ОЗУ головного узла превышает 14 ГБ. Конфигурацию памяти драйверов можно изменить с помощью пользовательского интерфейса Ambari, как показано на снимке экрана ниже.

В пользовательском интерфейсе Ambari перейдите к Spark2>Конфигурации>Advanced spark2-env. Затем укажите значение для spark_thrift_cmd_opts.

Освобождение кластерных ресурсов Spark

Так как используется динамическое выделение Spark, сервер Thrift потребляет только ресурсы, предназначенные для двух главных серверов приложений. Чтобы освободить эти ресурсы, следует остановить службы сервера Thrift, запущенные в кластере.

  1. В пользовательском интерфейсе Ambari на панели слева щелкните Spark2.

  2. На следующей странице выберите серверы Spark2 Thrift.

    Restart thrift server1.

  3. Вы увидите два головных узла, на которых запущен сервер Thrift Spark2. Выберите один из этих головных узлов.

    Restart thrift server2.

  4. На следующей странице перечислены все службы, запущенные на выбранном головном узле. Нажмите в этом списке кнопку раскрывающегося списка рядом с сервером Thrift Spark2, затем нажмите кнопку Остановить.

    Restart thrift server3.

  5. Повторите эти действия на другом головном узле.

Перезапуск службы Jupyter

Откройте пользовательский веб-интерфейс Ambari, как показано в начале статьи. В левой области навигации щелкните Jupyter, Действия службы, а затем — Перезапустить все. Служба Jupyter запустится на всех головных узлах.

Restart Jupyter.

Мониторинг ресурсов

Откройте пользовательский интерфейс Yarn, как показано в начале статьи. В таблице метрик кластера в верхней части экрана проверьте значения столбцов Memory Used (Используемая память) и Memory Total (Всего памяти). Если эти два значения близки, то для запуска следующего приложения может не хватить ресурсов. То же самое относится к столбцам VCores Used (Используемые ядра VCore) и VCores Total (Всего ядер VCore). Кроме того, если в главном представлении есть приложение с состоянием ACCEPTED (Принято), которое не переходит в состояние RUNNING (Выполняется) или FAILED (Сбой), то это также может означать, что для его запуска недостаточно ресурсов.

Resource Limit.

Завершение работы запущенных приложений

  1. В пользовательском интерфейсе Yarn на левой панели щелкните Выполняется. В списке выполняющихся приложений определите приложение, работу которого необходимо завершить, и щелкните ID (Идентификатор).

    Kill App1.

  2. В правом верхнем углу щелкните Завершить работу приложения, а затем нажмите кнопку ОК.

    Kill App2.

См. также

Для специалистов по анализу данных

Для разработчиков Apache Spark