На моем ноутбуке работает докер-контейнер с мастером и тремя рабочими, я могу запустить типичный пример 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 - рекомендуемый способ подключения ...