gpt4 book ai didi

scala - 如何使用Docker将参数传递给Spark-Submit

转载 作者:行者123 更新时间:2023-12-02 19:27:08 24 4
gpt4 key购买 nike

我的笔记本电脑上有一个Docker容器,其中有一个主机和三个 worker ,我可以使用以下命令输入主机的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方式...

最佳答案

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

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”。

关于scala - 如何使用Docker将参数传递给Spark-Submit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55242533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com