将包含fat jar的docker提交给Spark集群

我想提交一个包含'fat jar'的Docker容器到在DC / OS上运行的Spark群集。 这是我所做的。

  1. mvn clean install ,所以jar驻留在这里/target/application.jar
  2. docker build -t <repo/image> . && docker push <repo/image>
  3. 现在我的DC / OS能够从我的私有存储库中获取图像

我的Dockerfile看起来像这样:

 FROM docker-release.com/spark:0.1.1-2.1.0-2.8.0 # I extended from this image to get all necessary components ADD target/application.jar /application.jar # just put fat jar under root dir of Docker image COPY bootstrap.sh /etc/bootstrap.sh ENTRYPOINT ["/etc/bootstrap.sh"] 

以下是bootstrap.sh的样子:

 #!/bin/bash -e /usr/local/spark/bin/spark-submit --class com.spark.sample.MainClass --master spark://<host>:<port> --deploy-mode cluster --executor-memory 20G --total-executor-cores 100 /application.jar 

我将这个映像作为一个服务部署到了DC / OS上,Spark集群也运行了,服务成功提交给了Spark集群。 但是,Spark集群无法find该jar,因为它位于服务docker中。

I0621 06:06:25.985144 8760 fetcher.cpp:167]用命令复制资源:cp'/application.jar'/ var / lib / mesos / slave / slaves / e8a89a81-1da6-46a2-8caa-40a37a3f7016-S4 / frameworks /e8a89a81-1da6-46a2-8caa-40a37a3f7016-0003/executors/driver-20170621060625-18190/runs/c8e710a6-14e3-4da5-902d-e554a0941d27/application.jar”

cp:can not stat'/application.jar':没有这样的文件或目录

无法获取“/application.jar”:

无法复制命令'cp'/application.jar''/ var / lib / mesos / slave / slaves / e8a89a81-1da6-46a2-8caa-40a37a3f7016-S4 / frameworks / e8a89a81-1da6-46a2-8caa-40a37a3f7016-0003 /executors/driver-20170621060625-18190/runs/c8e710a6-14e3-4da5-902d-e554a0941d27/application.jar '',

退出状态:256无法与代理同步(可能已退出)

我的问题是:

这个jar是否需要放在Docker容器以外的地方? 对我来说没有任何意义,但是如果没有,Spark如何正确地findjar文件?