Подтвердить что ты не робот

Spark submit автоматически загружает банку в кластер?

Я пытаюсь отправить приложение Spark из локальной машины Terminal в свой кластер. Я использую --master yarn-cluster. Мне также нужно запустить программу драйвера на моем кластере, а не на машине, которую я отправляю приложению на моей локальной машине

Когда я предоставляю путь к jar приложения, который находится на моем локальном компьютере, будет автоматически загружать его в мой кластер?

Я использую

    bin/spark-submit 
--class com.my.application.XApp 
--master yarn-cluster --executor-memory 100m 
--num-executors 50 /Users/nish1013/proj1/target/x-service-1.0.0-201512141101-assembly.jar 
1000

и ошибка

Diagnostics: java.io.FileNotFoundException: File file:/Users/nish1013/proj1/target/x-service-1.0.0-201512141101- does not exist

В документации http://spark.apache.org/docs/latest/submitting-applications.html#launching-applications-with-spark-submit

Расширенное управление зависимостями. При использовании функции spark-submit   банку приложений вместе с любыми банками, включенными в параметр --jars   будет автоматически передаваться в кластер.

Но похоже, что нет!

4b9b3361

Ответ 1

Я вижу, что вы цитируете страницу spark-submit из Spark Docs, но я бы потратил намного больше времени на Запуск Spark on YARN. Нижняя линия, посмотрите на:

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

Далее вы заметите: "Мне нужно запустить программу драйвера на моем кластере тоже, а не на машине, я отправляю приложение на свою локальную машину"

Итак, я согласен с вами в том, что вы правы для запуска --master yarn-cluster вместо --master yarn-client

(и один комментарий отмечает, что может быть просто синтаксической ошибкой, когда вы уронили "assembly.jar", но я думаю, что это будет применяться также...)

Некоторые из основных предположений о реализациях, отличных от YARN, сильно меняются при введении YARN, в основном связанных с Classpaths, и необходимости нажимать кубки на рабочих.

Из электронного письма в списке Apache Spark:

Режим кластеризации YARN. Spark submit загружает ваши банки в кластер. В частности, он помещает банки в HDFS, чтобы ваш драйвер мог просто читать оттуда. Как и в других развертываниях, исполнители вытягивают банки из драйвер.

Итак, из Apache Spark YARN doc:

Убедитесь, что HADOOP_CONF_DIR или YARN_CONF_DIR указывает на каталог который содержит файлы конфигурации (клиентской стороны) для Hadoop кластер. Эти конфигурации используются для записи в HDFS и подключения к YARN ResourceManager.


ПРИМЕЧАНИЕ. Я вижу, что вы добавляете только один JAR, если там нужно добавить другие JAR специальное примечание об этом с YARN:

В режиме нитевого кластера драйвер запускается на другой машине, чем клиент, поэтому SparkContext.addJar не будет работать из коробки с файлами которые являются локальными для клиента. Сделать файлы на клиенте доступными для SparkContext.addJar, включите их в параметр -jars в запуске команда.

Эта страница в ссылке содержит несколько примеров.


И, конечно же, вы загрузили или создали версию Spark, специфичную для YARN.


Фон, в автономном развертывании кластера с использованием команды spark-submit и опции --deploy-mode, да, вы должны убедиться, что каждый рабочий node имеет доступ ко всем зависимостям, Spark не будет толкать их к кластер. Это связано с тем, что в режиме "автономного кластера" с Spark в качестве менеджера заданий вы не знаете, с каким драйвером будет работать node! Но это не относится к вашему делу.

Но если бы я мог, в зависимости от размера загружаемых банок, я бы по-прежнему явно помещал банки на каждый node или "глобально доступный" через HDFS по другой причине из документов:

Из Расширенное управление зависимостями, кажется, представляет лучшее из обоих миров, но также является отличной причиной для ручного нажатия ваших банок на все узлы:

local: - URI, начинающийся с local:/ожидается, будет существовать как локальный файл для каждого рабочего node. Это означает, что никакой сетевой IO не будет понесённый, и хорошо работает для больших файлов /JAR, которые нажимаются на каждый рабочего или общего доступа через NFS, GlusterFS и т.д.

Но я предполагаю, что local:/... изменится на hdfs:/... не уверен на этом.

Ответ 2

Да и нет. Смотря что ты имеешь в виду. Spark развертывает .jar для узлов в кластере. Однако он не будет загружать ваш .jar файл с вашей локальной машины в кластер.

Дополнительную информацию можно найти на странице Отправка приложений. Как вы можете видеть, в аргументах, которые вы передаете в spark-submit, есть тот, который должен быть глобально видимым: application-jar.

application-jar: путь к объединенной банке, включая ваше приложение и все зависимости. URL должен быть глобально видимым внутри вашего кластер, например, путь hdfs://или путь к файлу://, который является присутствует на всех узлах.

Насколько я понимаю, вы хотите использовать пряжи-клиент, а не пряжи-кластер. Это приведет к запуску драйвера на клиенте (например, на машине, которую вы пытаетесь вызвать "исправить", например, на вашем ноутбуке), без необходимости копирования файла .jar в кластере. Подробнее об этом здесь.

Ответ 3

Попробуйте добавить параметр -jars перед вашим /path/to/jar/file

spark-submit --jars/tmp/test.jar