2015-02-26 3 views
27

Я пытаюсь запустить искровое приложение, используя bin/spark-submit. Когда я ссылаюсь на свою прикладную банку внутри локальной файловой системы, она работает. Тем не менее, когда я скопировал мое приложение банку каталога в HDFS, я получаю следующее исключение:Spark-submit не работает, когда приложение jar находится в hdfs

Предупреждения: Пропуск удаленных фляги HDFS: // Localhost: 9000/пользователь/HDFS/банки/простой проект-1.0 -SNAPSHOT.jar. java.lang.ClassNotFoundException: com.example.SimpleApp

Вот команда:

$ ./bin/spark-submit --class com.example.SimpleApp --master local hdfs://localhost:9000/user/hdfs/jars/simple-project-1.0-SNAPSHOT.jar

Я использую Hadoop версии 2.6.0, искровой версия 1.2.1

+0

Что вы, наконец, решили здесь? Вы переключились на YARN или нашли другое обходное решение? Санджив, внизу, указывал на ошибку, которая кажется периферийной. Вы попробовали --deploy-mode cluster? Спасибо, интересная ошибка, если это действительно ошибка, и, похоже, она не была напрямую передана JIRA. Возможно, проверьте [this] (https://issues.apache.org/jira/browse/SPARK-10643) – JimLohse

ответ

18

Единственный способ это работает для меня, когда я использую

--master пряжу-кластер

+3

Что делать, если они не хотят использовать YARN? Я вижу, что это принятый ответ, но ОП пытался использовать локальные [*]? Eeen-teresting. – JimLohse

0

Да, это должен быть локальный файл. Я думаю, что это просто ответ.

+5

Но в [официальной документации] (https://spark.apache.org/docs/1.2.1/submitting -applications.html), он заявил там, что: «application-jar: путь к объединенной банке, включая ваше приложение и все зависимости. URL-адрес должен быть глобально видимым внутри вашего кластера, например, путь ** hdfs: // ** или файл: // путь, который присутствует на всех узлах. " – dilm

+0

@dlim хорошая точка. Это стоит вопрос в список рассылки user @. Из skimming кода он выглядит так, что он только позволяет локальные файлы –

+0

Спасибо. На данный момент я попробую список рассылки. – dilm

4

Для того, чтобы библиотека HDFS доступны искровым работу, вы должны запустить работу в кластерный режим.

$SPARK_HOME/bin/spark-submit \ 
--deploy-mode cluster \ 
--class <main_class> \ 
--master yarn-cluster \ 
hdfs://myhost:8020/user/root/myjar.jar 

Также есть Spark JIRA для клиентского режима, который еще не поддерживается.

SPARK-10643: скачать Поддержка HDFS приложение в режиме клиента искрой представить

+0

Приятный ответ мне должен быть принят :), но вы не показываете режим кластера, вы показываете пряжу, вам нужно «-deploy-mode cluster» и '--master spark: // yourmaster: 7077' вместо' --master пряжи-кластер'? Если OP сказал, что использует YARN, я пропустил его, хотя, думаю, HDFS - это хорошая подсказка. Я думаю, как заявлено, ОП пытается использовать менеджера вакансий Spark и найти ошибку в локальном режиме? – JimLohse

0

Существует обходной путь. Вы можете установить каталог в HDFS (который содержит вашу банку приложения) в качестве локального каталога.

Я сделал то же самое (с лазурной хранения больших двоичных объектов, но она должна быть похожа на HDFS)

пример команды для лазурного wasb

sudo mount -t cifs //{storageAccountName}.file.core.windows.net/{directoryName} {local directory path} -o vers=3.0,username={storageAccountName},password={storageAccountKey},dir_mode=0777,file_mode=0777

Теперь в вашей искру подать команду, вы предоставляете путь от команды выше

$ ./bin/spark-submit --class com.example.SimpleApp --master local {local directory path}/simple-project-1.0-SNAPSHOT.jar