Apache spark 将包含fat jar的docker提交到Spark集群
我想向运行在DC/OS上的Spark集群提交一个包含“fat jar”的docker容器。以下是我所做的Apache spark 将包含fat jar的docker提交到Spark集群,apache-spark,docker,apache-spark-sql,dcos,Apache Spark,Docker,Apache Spark Sql,Dcos,我想向运行在DC/OS上的Spark集群提交一个包含“fat jar”的docker容器。以下是我所做的 mvn clean install,因此jar驻留在这里/target/application.jar docker build-t.&docker推送 现在,我的DC/OS能够从我的私有存储库中提取映像 我的Dockerfile如下所示: FROM docker-release.com/spark:0.1.1-2.1.0-2.8.0 # I extended from this imag
mvn clean install
,因此jar驻留在这里/target/application.jardocker build-t.&docker推送
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
#/bin/bash-e
/usr/local/spark/bin/spark submit--class com.spark.sample.MainClass--master spark://:--deploy mode cluster--executor memory 20G--total executor cores 100/application.jar
我将此映像作为服务部署到DC/OS,Spark cluster也在其中运行,并且该服务成功提交到Spark cluster。但是,Spark cluster无法定位jar,因为它位于服务docker中
I0621 06:06:25.985144 8760 fetcher.cpp:167]正在使用复制资源
命令:cp'/application.jar'
“/var/lib/mesos/slave/slave/e8a89a81-1da6-46a2-8caa-40a37a3f7016-S4/frameworks/e8a89a81-1da6-46a2-8caa-40a37a3f7016-0003/executors/driver-20170620620625-18190/runs/c8e710a6-14e3-4da5-902d-e554a0941d27/application.jar”
cp:无法stat“/application.jar”:没有这样的文件或目录
无法获取“/application.jar”:
无法使用命令“cp'/application.jar”进行复制
“/var/lib/mesos/slave/slave/e8a89a81-1da6-46a2-8caa-40a37a3f7016-S4/frameworks/e8a89a81-1da6-46a2-8caa-40a37a3f7016-0003/executors/driver-20170620620625-18190/runs/c8e710a6-14e3-4da5-902d-e554a0941d27/application.jar”
退出状态:256未能与代理同步(可能是
退出)
我的问题是:
罐子是否需要放在Docker容器之外的其他地方?这对我来说没有任何意义,但如果没有,Spark如何才能正确找到jar文件?这可能对您没有用,因为您使用的是maven,但在sbt中,您可以使用本机打包程序&DockerPlugin来构建docker映像,不管您想从sbt中获得什么:只需运行:
sbt docker:publishLocal
我敢说maven会有一些类似的东西,因为您使用的是maven,它可能对您没有用处,但在sbt中,您可以使用本机packager&DockerPlugin来构建docker映像,不管您想从sbt中得到什么,只需运行:sbt docker:publishLocal
我敢说maven也会有类似的功能