我想向在DC / OS上运行的Spark群集提交一个包含'fat jar'的docker容器。这就是我所做的。
mvn clean install
,因此jar位于/target/application.jar docker build -t <repo/image> . && docker push <repo/image>
我的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群集无法找到jar,因为它位于服务泊坞窗中。
I0621 06:06:25.985144 8760 fetcher.cpp:167]使用复制资源 命令:cp'/ application.jar' “的/ var / lib中/ mesos /从/从站/ e8a89a81-1da6-46a2-8caa-40a37a3f7016-S4 /框架/ e8a89a81-1da6-46a2-8caa-40a37a3f7016-0003 /执行器/驱动器-20170621060625-18190 /运行/ c8e710a6- 14e3-4da5-902d-e554a0941d27 / application.jar'
cp:无法统计'/application.jar':没有这样的文件或目录
无法获取'/application.jar':
无法使用命令'cp'/ application.jar'进行复制 “的/ var / lib中/ mesos /从/从站/ e8a89a81-1da6-46a2-8caa-40a37a3f7016-S4 /框架/ e8a89a81-1da6-46a2-8caa-40a37a3f7016-0003 /执行器/驱动器-20170621060625-18190 /运行/ c8e710a6- 14e3-4da5-902d-e554a0941d27 / application.jar '',
退出状态:256无法与代理同步(可能是 退出)
我的问题是:
是否需要将jar放在Docker容器内的其他位置?它对我没有任何意义,但如果没有,Spark如何才能正确找到jar文件?