Как передать аргументы в spark-submit с помощью Docker - PullRequest
1 голос
/ 19 марта 2019

На моем ноутбуке работает докер-контейнер с мастером и тремя рабочими, я могу запустить типичный пример wordcount, введя ip мастера с помощью такой команды:

bash-4.3# spark/bin/spark-submit --class com.oreilly.learningsparkexamples.mini.scala.WordCount --master spark://spark-master:7077 /opt/spark-apps/learning-spark-mini-example_2.11-0.0.1.jar /opt/spark-data/README.md /opt/spark-data/output-5

Я могуПосмотрите, как файлы были сгенерированы внутри output-5

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

docker run --network docker-spark-cluster_spark-network -v /tmp/spark-apps:/opt/spark-apps --env SPARK_APPLICATION_JAR_LOCATION=$SPARK_APPLICATION_JAR_LOCATION --env SPARK_APPLICATION_MAIN_CLASS=$SPARK_APPLICATION_MAIN_CLASS -e APP_ARGS="/opt/spark-data/README.md /opt/spark-data/output-5" spark-submit:2.4.0

Где

echo $SPARK_APPLICATION_JAR_LOCATION
/opt/spark-apps/learning-spark-mini-example_2.11-0.0.1.jar

echo $SPARK_APPLICATION_MAIN_CLASS
com.oreilly.learningsparkexamples.mini.scala.WordCount

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

Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
    at com.oreilly.learningsparkexamples.mini.scala.WordCount$.main(WordCount.scala:11)

Понятно, что в нулевой позиции не собирается путь первого параметра, из входного файла которого я хочу сделать подсчет слов.

Вопрос в том, почемуДокер не использует аргументы, переданные через -e APP_ARGS = "/ opt / spark-data / README.md / opt / spark-data-output-5"?

Я уже пытался выполнить задание традиционным способом, войдя в систему в драйвере spark-master и выполнив команду spark-submit, но когда я пытаюсь запустить задание с помощью докера, это не работает.

Это должно быть тривиально, но у меня все еще есть подсказка.Кто-нибудь может мне помочь?

РЕШЕНО

Мне нужно использовать команду, подобную этой:

docker run --network docker-spark-cluster_spark-network -v /tmp/spark-apps:/opt/spark-apps --env SPARK_APPLICATION_JAR_LOCATION=$SPARK_APPLICATION_JAR_LOCATION --env SPARK_APPLICATION_MAIN_CLASS=$SPARK_APPLICATION_MAIN_CLASS --env SPARK_APPLICATION_ARGS="/opt/spark-data/README.md /opt/spark-data/output-6" spark-submit:2.4.0

Продолжая, мне пришлось изменить -e APP_ARGS на --env SPARK_APPLICATION_ARGS

-e APP_ARGS - рекомендуемый способ подключения ...

1 Ответ

1 голос
/ 19 марта 2019

Это команда, которая решает мою проблему:

docker run --network docker-spark-cluster_spark-network -v /tmp/spark-apps:/opt/spark-apps --env SPARK_APPLICATION_JAR_LOCATION=$SPARK_APPLICATION_JAR_LOCATION --env SPARK_APPLICATION_MAIN_CLASS=$SPARK_APPLICATION_MAIN_CLASS --env SPARK_APPLICATION_ARGS="/opt/spark-data/README.md /opt/spark-data/output-6" spark-submit:2.4.0

Я должен использовать --env SPARK_APPLICATION_ARGS = "args1 args2 argsN" вместо -e APP_ARGS = "args1 args2 argsN".

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