首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用docker将参数传递给spark-submit

如何使用docker将参数传递给spark-submit
EN

Stack Overflow用户
提问于 2019-03-19 21:46:09
回答 1查看 581关注 0票数 1

我有一个docker容器在我的笔记本电脑上运行,其中有一个master和三个worker,我可以通过使用如下命令输入master的ip来启动典型的单词计数示例:

代码语言:javascript
复制
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中生成的

但当我尝试从外部启动该进程时,使用以下命令:

代码语言:javascript
复制
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

哪里

代码语言:javascript
复制
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行,首先,收集了第一个参数的路径,我有一个错误,如下所示:

代码语言:javascript
复制
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运行任务时,它不起作用。

这肯定是微不足道的,但我仍然有任何线索。有人能帮我吗?

已解决

我必须使用这样的命令:

代码语言:javascript
复制
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方式...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-20 01:31:30

这是解决我的问题的命令:

代码语言:javascript
复制
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”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55242533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档