我有一个docker容器在我的笔记本电脑上运行,其中有一个master和三个worker,我可以通过使用如下命令输入master的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当我进入尝试任务的worker页面时,我可以看到在第11行,首先,收集了第一个参数的路径,我有一个错误,如下所示:
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
at com.oreilly.learningsparkexamples.mini.scala.WordCount$.main(WordCount.scala:11)很明显,在零的位置不是收集第一个参数的路径,这是我想要做字数统计的输入文件之一。
问题是,为什么docker不使用通过-e数据传递的参数“/opt/spark-APP_ARGS=/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方式...
发布于 2019-03-20 01:31:30
这是解决我的问题的命令:
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”。
https://stackoverflow.com/questions/55242533
复制相似问题