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, результаты выполнения следующие:
3. Автономный режим
Автономный — это встроенный режим кластера, предоставляемый Spark, который управляется встроенным диспетчером ресурсов. Ниже показана конфигурация кластера из 1 узла Mater и 2 рабочих узлов, как показано на рисунке Здесь для демонстрации используются два хоста:
- hadoop001: поскольку хостов всего два, то hadoop001 является одновременно и главным узлом, и рабочим узлом;
- hadoop002 : Рабочий узел.
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, который должен показать, что есть два действительных рабочих узла:
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
В это время вы можете просматривать веб-интерфейс. У меня здесь недостаточно памяти: задание требуется в команде отправкиexecutor-memory
2G, но фактический рабочий узелMemory
Только 1G, в это время вы можете изменить--executor-memory
, вы также можете изменить рабочийMemory
, которое по умолчанию равно всей доступной памяти на узле минус 1G.
Все дополнительные конфигурации для основных и рабочих узлов следующие, их можно найти по адресу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.:Руководство для начинающих по большим данным