Серия Spark (5) — режим работы Spark и отправка заданий

Spark

1. Подача работы

1.1 spark-submit

Искра используется во всех режимахspark-submitкоманда для отправки задания в следующем формате:

./bin/spark-submit \
  --class <main-class> \        # 应用程序主入口类
  --master <master-url> \       # 集群的 Master Url
  --deploy-mode <deploy-mode> \ # 部署模式
  --conf <key>=<value> \        # 可选配置       
  ... # other options    
  <application-jar> \           # Jar 包路径 
  [application-arguments]       #传递给主入口类的参数  

Следует отметить, что в кластерной средеapplication-jarОн должен быть доступен для всех узлов в кластере.Это может быть путь в HDFS или путь в локальной файловой системе.Если это путь в локальной файловой системе, необходимо, чтобы пакет Jar существовал по тому же пути на каждом машинном узле в кластере.

1.2 deploy-mode

режим развертывания имеетclusterа такжеclientДва необязательных параметра, по умолчаниюclient. Оба объясняются здесь в режиме Spark On Yarn:

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

1.3 master-url

Все необязательные параметры для master-url показаны в следующей таблице:

Master URL Meaning
local Запуск Spark локально с одним потоком
local[K] Запуск Spark локально с K рабочими потоками
local[K,F] Используйте K рабочих потоков для локального запуска, второй параметр — количество неудачных попыток выполнения задачи.
local[*] Запустите Spark локально с тем же количеством потоков, что и ядра ЦП.
local[*,F] Запустите Spark локально с тем же количеством потоков, что и ядра ЦП.
Второй параметр — количество неудачных попыток выполнения задачи.
spark://HOST:PORT Подключитесь к главному узлу указанного автономного кластера. По умолчанию номер порта 7077.
spark://HOST1:PORT1,HOST2:PORT2 Если автономный кластер использует Zookeeper для обеспечения высокой доступности, он должен содержать все адреса главного узла, установленные zookeeper.
mesos://HOST:PORT Подключитесь к указанному кластеру Mesos. Порт по умолчанию 5050. Для кластера Mesos, использующего ZooKeeper, используйтеmesos://zk://...чтобы указать адрес, используйте--deploy-mode clusterрежим подачи.
yarn Подключитесь к кластеру YARN, настроенномуHADOOP_CONF_DIRилиYARN_CONF_DIRпринимать решение. использовать--deploy-modeпараметры для настройкиclientилиclusterмодель.

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

2. Локальный режим

Отправка задания в локальном режиме является самой простой и не требует настройки.Команда отправки выглядит следующим образом:

# 本地模式提交应用
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100   # 传给 SparkPi 的参数

spark-examples_2.11-2.4.0.jarэто пакет тестовых примеров, предоставляемый Spark,SparkPiИспользуется для расчета значения Pi, результаты выполнения следующие:

https://github.com/heibaiying

3. Автономный режим

Автономный — это встроенный режим кластера, предоставляемый Spark, который управляется встроенным диспетчером ресурсов. Ниже показана конфигурация кластера из 1 узла Mater и 2 рабочих узлов, как показано на рисунке Здесь для демонстрации используются два хоста:

  • hadoop001: поскольку хостов всего два, то hadoop001 является одновременно и главным узлом, и рабочим узлом;
  • hadoop002 : Рабочий узел.

https://github.com/heibaiying

3.1 Конфигурация среды

Во-первых, убедитесь, что Spark был распакован по одному и тому же пути на обоих хостах. Затем введите hadoop001${SPARK_HOME}/conf/В директорию скопируйте пример конфигурации и настройте его:

# cp spark-env.sh.template spark-env.sh

существуетspark-env.shНастройте каталог JDK в JDK и после завершения распространите конфигурацию на hadoop002 с помощью команды scp:

# JDK安装位置
JAVA_HOME=/usr/java/jdk1.8.0_201

3.2 Конфигурация кластера

существует${SPARK_HOME}/conf/В директорию скопируйте пример конфигурации кластера и настройте его:

# cp slaves.template slaves

Укажите имена хостов всех рабочих узлов:

# A Spark Worker will be started on each of the machines listed below.
hadoop001
hadoop002

Вот три вещи, на которые стоит обратить внимание:

  • Сопоставление имени хоста с IP-адресом должно быть в/etc/hostsФайл настроен, в противном случае IP-адрес будет использоваться напрямую;
  • Каждое имя хоста должно быть на отдельной строке;
  • Главный хост Spark получает доступ ко всем рабочим узлам через SSH, поэтому необходимо предварительно настроить вход без пароля.

3.3 Запуск

использоватьstart-all.shДелегат запускает мастер и все рабочие сервисы.

./sbin/start-master.sh 

Получите доступ к порту 8080 и просмотрите веб-интерфейс Spark, который должен показать, что есть два действительных рабочих узла:

https://github.com/heibaiying

3.4 Отправить задание

# 以client模式提交到standalone集群 
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop001:7077 \
--executor-memory 2G \
--total-executor-cores 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100

# 以cluster模式提交到standalone集群 
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://207.184.161.138:7077 \
--deploy-mode cluster \
--supervise \  # 配置此参数代表开启监督,如果主应用程序异常退出,则自动重启 Driver
--executor-memory 2G \
--total-executor-cores 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100

3.5 Дополнительная конфигурация

Распространенная проблема при отправке задания на виртуальную машину заключается в том, что задание не может запросить достаточно ресурсов:

Initial job has not accepted any resources; 
check your cluster UI to ensure that workers are registered and have sufficient resources

https://github.com/heibaiying


В это время вы можете просматривать веб-интерфейс. У меня здесь недостаточно памяти: задание требуется в команде отправкиexecutor-memory2G, но фактический рабочий узелMemoryТолько 1G, в это время вы можете изменить--executor-memory, вы также можете изменить рабочийMemory, которое по умолчанию равно всей доступной памяти на узле минус 1G.

https://github.com/heibaiying


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

Переменная среды Значение
SPARK_MASTER_HOST адрес главного узла
SPARK_MASTER_PORT порт адреса главного узла (по умолчанию: 7077)
SPARK_MASTER_WEBUI_PORT Порт веб-интерфейса мастера (по умолчанию: 8080)
SPARK_MASTER_OPTS Используется только для основных свойств конфигурации, формат "-Dx=y" (по умолчанию: нет), все свойства могут ссылаться на официальную документацию:spark-standalone-mode
SPARK_LOCAL_DIRS Каталог временного хранилища Spark для промежуточного вывода карты и постоянного хранения RDD. Несколько каталогов, разделенных запятыми
SPARK_WORKER_CORES Количество ядер ЦП, которые могут использовать рабочие узлы Spark. (по умолчанию: все доступные)
SPARK_WORKER_MEMORY Объем памяти, который могут использовать рабочие узлы Spark (по умолчанию: общая память минус 1 ГБ);
SPARK_WORKER_PORT порт рабочего узла spark (по умолчанию: случайный)
SPARK_WORKER_WEBUI_PORT Порт веб-интерфейса рабочего (по умолчанию: 8081)
SPARK_WORKER_DIR Каталог, в котором рабочий процесс запускает приложение, содержащее журналы и рабочее пространство (по умолчанию: SPARK_HOME/work).
SPARK_WORKER_OPTS Свойство конфигурации только для рабочего, формат "-Dx=y" (по умолчанию: нет). Все свойства могут ссылаться на официальную документацию:spark-standalone-mode
SPARK_DAEMON_MEMORY Память, выделенная для искрового главного и рабочего демонов. (по умолчанию: 1G)
SPARK_DAEMON_JAVA_OPTS Параметры JVM для основного и рабочего демонов spark в формате "-Dx=y" (по умолчанию: нет)
SPARK_PUBLIC_DNS Общедоступные DNS-имена мастера искры и рабочих процессов. (по умолчанию: нет)

3. Искра в режиме пряжи

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

3.1 Конфигурация

существуетspark-env.shРасположение каталога конфигурации, в котором настроен Hadoop, вы можете использоватьYARN_CONF_DIRилиHADOOP_CONF_DIRУказать:

YARN_CONF_DIR=/usr/app/hadoop-2.6.0-cdh5.15.2/etc/hadoop
# JDK安装位置
JAVA_HOME=/usr/java/jdk1.8.0_201

3.2 Старт

Необходимо убедиться, что Hadoop запущен, включая YARN и HDFS, так как Spark будет использовать HDFS для хранения временных файлов в процессе вычислений.Если HDFS не запущена, будет выдано исключение.

# start-yarn.sh
# start-dfs.sh

3.3 Подать заявку

#  以client模式提交到yarn集群 
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--executor-memory 2G \
--num-executors 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100

#  以cluster模式提交到yarn集群 
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--executor-memory 2G \
--num-executors 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100

Дополнительные статьи серии о больших данных см. в проекте с открытым исходным кодом GitHub.:Руководство для начинающих по большим данным