我的笔记本电脑上有一个docker容器,其中有一个master和三个工人,我可以使用以下命令输入master的ip来启动典型的wordcount示例:
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)
很明显,在零位置不收集第一个参数的路径,第一个参数是我要对其进行单词计数的输入文件。
问题是,为什么docker不使用通过-e APP_ARGS =“ / opt / spark-data / README.md / opt / spark-data-output-5”传递的参数?
我已经尝试以传统方式运行该作业,登录驱动程序spark-master并运行spark-submit命令,但是当我尝试使用docker运行任务时,它将无法正常工作。
这一定是微不足道的,但是我仍然有任何线索。有人可以帮我吗?
已解决
我必须使用这样的命令:
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是建议的docker方法...
答案 0 :(得分:1)
这是解决我的问题的命令:
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”。