Ответ 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:/... не уверен на этом.