У меня уже есть кластер из 3 машин (ubuntu1, ubuntu2, ubuntu3 виртуальным сервером VM), на котором запущен Hadoop 1.0.0. Я установил искру на каждой из этих машин. ub1 - мой мастер node, а другие узлы работают как подчиненные. Мой вопрос в том, что такое искровой драйвер? и должен ли мы установить IP-адрес и порт для запуска драйвера на spark.driver.host
и где он будет выполнен и расположен? (ведущий или ведомый)
Искры водителя в искры Apache
Ответ 1
Драйвер искры - это программа, которая декларирует преобразования и действия на RDD данных и отправляет такие запросы хозяину.
В практическом плане драйвер - это программа, которая создает SparkContext, подключающуюся к данному Spark Master. В случае локального кластера, как и в вашем случае, master_url=spark://<host>:<port>
Его местоположение не зависит от ведущего/ведомого. Вы можете совместно с мастером или запустить его из другого node. Единственное требование состоит в том, что оно должно быть в сети, адресуемой от Рабочих Искры.
Вот как выглядит конфигурация вашего драйвера:
val conf = new SparkConf()
.setMaster("master_url") // this is where the master is specified
.setAppName("SparkExamplesMinimal")
.set("spark.local.ip","xx.xx.xx.xx") // helps when multiple network interfaces are present. The driver must be in the same network as the master and slaves
.set("spark.driver.host","xx.xx.xx.xx") // same as above. This duality might disappear in a future version
val sc = new spark.SparkContext(conf)
// etc...
Чтобы немного объяснить разные роли:
- Драйвер подготавливает контекст и объявляет операции с данными с помощью преобразований и действий RDD.
- Драйвер представляет сериализованный график RDD ведущему устройству. Мастер создает задания из него и передает их работникам на исполнение. Он координирует различные этапы работы.
- Рабочие - это то место, где выполняются задачи. Они должны иметь ресурсы и сетевое подключение, необходимые для выполнения операций, запрошенных на RDD.
Ответ 2
Ваш вопрос связан со спарк-развертыванием на пряже, см. 1: http://spark.apache.org/docs/latest/running-on-yarn.html "Запуск Spark на YARN"
Предположим, что вы начинаете с spark-submit --master yarn
cmd:
- Cmd запросит диспетчер ресурсов пряжи (RM) для запуска процесса ApplicationMaster (AM) на одном из ваших кластерных компьютеров (на них установлен менеджер узла пряжи).
- После запуска AM он вызовет основной метод вашей программы драйвера. Таким образом, драйвер - это то, где вы определяете свой искровой контекст, свой rdd и свою работу. Драйвер содержит метод main входа, который запускает вычисление искры.
- Контекст spark подготовит оконечную точку RPC к исполнителю для обратной связи и ко многим другим вещам (хранилище памяти, диспетчер дисковых блоков, сервер Jetty...)
- AM будет запрашивать у RM контейнеры для запуска ваших искровых исполнителей с URL-адресом RPC драйвера (что-то вроде spark://CoarseGrainedScheduler @ip: 37444), указанным в cmd запуска исполнителя.
Ответ 3
Драйвер Spark - это процесс, который создает и владеет экземпляром SparkContext. Это твое Приложение Spark, которое запускает основной метод, в котором экземпляр SparkContext создано. Это кокпит выполнения заданий и задач (с использованием DAGScheduler и Task Планировщик). Он размещает веб-интерфейс для среды
Он разбивает приложение Spark на задачи и планирует их запускать на исполнителей. Драйвер - это место, где планировщик задач живет и порождает задачи между рабочими. Водитель координирует работу и общее выполнение задач.
Ответ 4
Проще говоря, Spark driver - это программа, которая содержит основной метод (основной метод является отправной точкой вашей программы). Таким образом, в Java драйвером будет класс, который будет содержать public static void main (String args []).
В кластере вы можете запустить эту программу одним из следующих способов: 1) на любом удаленном хост-компьютере. Здесь вам нужно будет предоставить информацию о удаленных хостах при отправке программы драйвера на удаленный хост. Драйвер работает в JVM-процессе, созданном на удаленном компьютере, и возвращается только с окончательным результатом.
2) Локально от вашего клиентского компьютера (ваш ноутбук). Здесь программа драйвера запускается в процессе JVM, созданного на вашем компьютере локально. Отсюда он отправляет задачу удаленным хостам и ждет результата от каждой задачи.
Ответ 5
Если вы установите конфигурацию "spark.deploy.mode = cluster", ваш драйвер будет запущен на ваших рабочих узлах (ubuntu2 или ubuntu3).
Если spark.deploy.mode = драйвер, который является значением по умолчанию, тогда драйвер будет запускаться на компьютере, чтобы отправить заявку.
И, наконец, вы можете увидеть свое приложение в веб-интерфейсе: http://driverhost:driver_ui_port, где driver_ui_port по умолчанию 4040, и вы можете изменить порт на set config "spark.ui.port"
Ответ 6
Spark драйвер - это узел, который позволяет приложению создавать SparkContext, а sparkcontext - это соединение с вычислительным ресурсом. Теперь драйвер может запускать поле, в котором он представлен, или запускаться на одном из узлов кластера при использовании какого-либо менеджера ресурсов, такого как YARN.
Оба варианта клиента/кластера имеют некоторый компромисс как
- Доступ к ЦП/памяти одного узла кластера, иногда это хорошо, потому что узел кластера будет иметь большой объем памяти.
- Журналы драйверов находятся на узле кластера по сравнению с локальным блоком, из которого было отправлено задание.
- У вас должен быть сервер истории для кластерного режима, другие мудрые журналы на стороне водителя будут потеряны.
- Некоторое время сложно установить исполнителя зависимостей (т.е. некоторую нативную зависимость), и запуск приложения spark в режиме клиента приходит на помощь.
Если вы хотите узнать больше об анатомии Spark Job, тогда пост может быть полезен http://ashkrit.blogspot.com/2018/09/anatomy-of-apache-spark-job.html.
Ответ 7
Задание Spark-Submit можно запустить в "deploy-mode" как кластер:
Отредактируйте файл конф мастера master
SPARK_HOME/conf/spark-env.sh
Установите SPARK_MASTER_HOST = masteripaddr
Шаг 1: Запустите главный узел
/opt/spark/spark-2.4.0-bin-hadoop2.7/sbin/start-master.sh
Шаг 2: Запустите узел кластера на подчиненном компьютере
/opt/spark/spark-2.4.0-bin-hadoop2.7/sbin/start-slave.sh spark://masteripaddr:7077
Шаг 3: Запустите задание spark-submit
/opt/spark/spark-2.4.0-bin-hadoop2.7/bin/spark-submit --master spark://localhost:7077 --deploy-mode cluster --class classname Application.jar