Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье приводятся общие сведения о стратегиях оптимизации приложений Apache Spark в Azure HDInsight.
Обзор
Вы можете столкнуться со следующими распространенными сценариями
- Одно и то же задание Spark выполняется медленнее, чем раньше, в том же кластере HDInsight
- Задание Spark выполняется медленнее в кластере HDInsight, чем в локальной среде или у другого стороннего поставщика услуг
- В одном кластере HDI задание Spark выполняется медленнее, чем в другом
Производительность заданий Apache Spark зависит от нескольких факторов. Эти факторы эффективности включают:
- Способ хранения данных
- Способ настройки кластера
- Операции, используемые при обработке данных.
- Неисправная служба "yarn"
- Ограничения памяти из-за неправильно определённого размера исполнителей и ошибки нехватки памяти (OutOfMemoryError)
- Слишком много или слишком мало задач
- Перекос данных привел к нескольким ресурсоемким или медленным задачам.
- Более медленное выполнение задач на неэффективных узлах
Шаг 1. Проверка работоспособности службы yarn
- Перейдите в пользовательский интерфейс Ambari.
- Проверьте наличие уведомлений ResourceManager или NodeManager
- Проверьте состояние ResourceManager и NodeManager в YARN > СВОДКА: все NodeManager должны быть в состоянии "Запущено", а только активный ResourceManager должен быть в состоянии "Запущено"
Проверьте, доступен ли пользовательский интерфейс Yarn через
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/clusterПроверьте наличие исключений или ошибок в журнале ResourceManager в
/var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log
См. дополнительную информацию в разделе Распространенные проблемы Yarn
Шаг 2. Сравнение новых ресурсов приложения с доступными ресурсами yarn
Перейдите в пользовательский интерфейс Ambari > YARN > SUMMARY (Сводка), проверьте CLUSTER MEMORY (Память кластера) в ServiceMetrics
Тщательно просмотрите метрики очереди yarn в деталях:
- Перейдите в пользовательский интерфейс Yarn, проверьте метрики планировщика Yarn с помощью
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster/scheduler - Либо вы можете проверить метрики планировщика Yarn с помощью REST API Yarn. Например,
curl -u "xxxx" -sS -G "https://YOURCLUSTERNAME.azurehdinsight.net/ws/v1/cluster/scheduler". Для ESP следует использовать учетную запись администратора домена.
- Вычислите общий объем ресурсов для нового приложения
- Все ресурсы исполнителей:
spark.executor.instances * (spark.executor.memory + spark.yarn.executor.memoryOverhead) and spark.executor.instances * spark.executor.cores. Подробнее см. в статье о конфигурации исполнителей Spark - ApplicationMaster
- В режиме кластера используйте
spark.driver.memoryиspark.driver.cores - В режиме клиента используйте
spark.yarn.am.memory+spark.yarn.am.memoryOverheadиspark.yarn.am.cores
- В режиме кластера используйте
Примечание.
yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb
- Сравните общий объем ресурсов вашего нового приложения с доступными ресурсами Yarn в указанной очереди
Шаг 3. Отслеживание приложения Spark
Необходимо определить следующие симптомы с помощью пользовательского интерфейса Spark или пользовательского интерфейса журналов Spark:
- Какой этап медленный
- Используются ли полностью все виртуальные CPU-ядра исполнителя в хронологии событий на вкладке Этап
- При использовании Spark SQL какой физический план отображается на вкладке SQL
- Длина ли DAG слишком велика на одном этапе
- Изучите метрики задач (размер входных данных, размер записи перестановки, время работы GC) на вкладке Этап
Подробнее см. в разделе Отслеживание приложений Spark
Шаг 4. Оптимизация приложения Spark
Существует много способов оптимизации (например, кэширование), которые помогут преодолеть эти проблемы с учетом неравномерного распределения данных.
В каждой из следующих статей можно найти сведения о различных аспектах оптимизации Spark.
- Оптимизация хранилища данных для Apache Spark
- Оптимизация обработки данных для Apache Spark
- Оптимизация потребления памяти для Apache Spark
- Оптимизация конфигурации кластера HDInsight для Apache Spark
Оптимизация секций Spark SQL
-
spark.sql.shuffle.partitionsпо умолчанию имеет значение 200. Мы можем настроить в соответствии с бизнес-потребностями при перестановке данных для объединений или агрегаций. -
spark.sql.files.maxPartitionBytesпо умолчанию имеет значение 1 Г в HDI. Максимальное число байтов для упаковки в одну секцию при чтении файлов. Эта конфигурация действует только при использовании файловых источников, таких как Parquet, JSON и ORC. - AQE в Spark 3.0. См. статью Адаптивное выполнение запросов