将包含fat jar的docker提交给Spark集群
我想提交一个包含'fat jar'的Docker容器到在DC / OS上运行的Spark群集。 这是我所做的。
-
mvn clean install
,所以jar驻留在这里/target/application.jar -
docker build -t <repo/image> . && docker push <repo/image>
- 现在我的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文件?