Статьи

Конфигурация распределения ресурсов для Spark на YARN

mapr-данных платформы В этом посте я объясню конфигурации распределения ресурсов для Spark на YARN, опишу режимы yarn-client и yarn-cluster и приведу примеры.

Spark может запросить два ресурса в YARN: процессор и память. Обратите внимание, что конфигурации Spark для распределения ресурсов устанавливаются в spark-defaults.conf с именем, подобным spark.xx.xx. Некоторые из них имеют соответствующий флаг для клиентских инструментов, таких как spark-submit / spark-shell / pyspark, с именем, например -xx-xx. Если конфигурация имеет соответствующий флаг для клиентских инструментов, необходимо поставить флаг после конфигурации в круглых скобках »()». Например:

1
2
spark.driver.cores
(--driver-cores)

1. пряжа-клиент против режима пряжи-кластера

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

По документации Spark :

  • В режиме клиент-пряжа драйвер запускается в клиентском процессе, а мастер приложения используется только для запроса ресурсов из YARN.
  • В режиме кластера пряжи драйвер Spark запускается в главном процессе приложения, которым управляет YARN в кластере, и клиент может уйти после запуска приложения.

2. Мастер приложений (AM)

а. Нить-клиент

Перераспределение-Блог-Img1

Давайте посмотрим на настройки ниже в качестве примера:

1
2
3
[root@h1 conf]# cat spark-defaults.conf |grep am
spark.yarn.am.cores     4
spark.yarn.am.memory 777m

По умолчанию spark.yarn.am.memoryOverhead имеет значение AM memory * 0,07 с минимальным значением 384. Это означает, что если мы установим для spark.yarn.am.memory значение 777M, фактический размер AM-контейнера будет равен 2G. Это связано с тем, что 777 + Min (384, 777 * 0,07) = 777 + 384 = 1161 и значение по умолчанию yarn.scheduler.minimum-distribution-mb = 1024, поэтому контейнер 2 ГБ будет выделен для AM. В результате выделяется AM-контейнер (2G, 4 ядра) с размером кучи Java -Xmx777M:

Назначенный контейнер контейнер_1432752481069_0129_01_000001 вместимости

1
<memory:2048, vCores:4, disks:0.0>

б. Пряжа-кластер

В режиме кластера пряжи драйвер Spark находится внутри YARN AM. Связанные с драйвером конфигурации, перечисленные ниже, также управляют распределением ресурсов для AM.

Перераспределение-Блог-Img2

Взгляните на настройки ниже в качестве примера:

1
2
3
4
MASTER=yarn-cluster /opt/mapr/spark/spark-1.3.1/bin/spark-submit --class org.apache.spark.examples.SparkPi  \
--driver-memory 1665m \
--driver-cores 2 \
/opt/mapr/spark/spark-1.3.1/lib/spark-examples*.jar 1000

Поскольку 1665 + Min (384,1665 * 0,07) = 1665 + 384 = 2049> 2048 (2G), контейнер 3G будет выделен для AM. В результате выделяется AM-контейнер (3G, 2 ядра) с размером кучи Java -Xmx1665M:

Назначенный контейнер контейнер_1432752481069_0135_02_000001 вместимости:

1
<memory:3072, vCores:2, disks:0.0>

3. Контейнеры для исполнителей Spark

Для ресурсов исполнителя Spark режимы yarn-client и yarn-cluster используют одинаковые конфигурации:

Перераспределение-Блог-img3

В файле spark-defaults.conf для параметра spark.executor.memory установлено значение 2g.

Spark запустит 2 (3G, 1-ядерный) контейнера-исполнителя с размером кучи Java -Xmx2048M: Назначенный контейнер container_1432752481069_0140_01_000002 вместимости:

1
<memory:3072, vCores:1, disks:0.0>

Назначенный контейнер-контейнер_1432752481069_0140_01_000003 вместимости:

1
<memory:3072, vCores:1, disks:0.0>

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

Обратите внимание, что если динамическое распределение ресурсов включено, если для параметра spark.dynamicAllocation.enabled установлено значение true, Spark может масштабировать количество исполнителей, зарегистрированных в этом приложении, в зависимости от рабочей нагрузки. В этом случае вам не нужно указывать spark.executor.instances вручную.

Ключевые вынос

  • Конфигурации, связанные с ресурсами драйвера Spark, также управляют главным ресурсом приложения YARN в режиме кластера пряжи.
  • При подсчете памяти для исполнителей учитывайте максимальную (7%, 384 м) служебную память вне кучи.
  • Количество ядер процессора на исполнителя определяет количество одновременных задач на исполнителя.

В этом посте вы узнали о настройках распределения ресурсов для Spark на YARN. Если у вас есть какие-либо дополнительные вопросы, пожалуйста, задавайте их в разделе комментариев ниже.