Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 将包含fat jar的docker提交到Spark集群_Apache Spark_Docker_Apache Spark Sql_Dcos - Fatal编程技术网

Apache spark 将包含fat jar的docker提交到Spark集群

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

我想向运行在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 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也会有类似的功能