如何在 Spark docker-compose 网络中提交 jar?
Posted
技术标签:
【中文标题】如何在 Spark docker-compose 网络中提交 jar?【英文标题】:How to spark-submit a jar in a Spark docker-compose network? 【发布时间】:2021-08-03 02:15:27 【问题描述】:我正在尝试使用 docker-compose 设置和使用本地 Spark 开发环境。 我创建了一个由 3 个服务组成的 docker-compose 堆栈:
-
使用bitnami/spark 的 Spark master
一个 Spark worker 使用 bitnami/spark
一个带有 Scala 和 sbt 的开发容器(基于hseeberger/scala-sbt)
在开发容器中工作,我创建了一个非常简单的HelloWorld scala 应用程序并使用sbt assembly
构建它,设置spark-core 提供范围的依赖。
现在我想在我的小型 Spark 集群上运行 HelloWorld jar 作为作业。我设法通过在 Spark 工作容器上复制 jar 并从工作人员本身执行 spark-submit
来使用 --deploy-mode cluster
运行该作业。作业日志正确显示在 Spark 浏览器 UI 上。 但这是正确的方法吗?
如果有更多的工人,我该怎么做?我尝试从 Spark master 中 spark-submit
工作,但它仅适用于 --deploy-mode=client
,在这种情况下,工作日志不会出现在浏览器 UI 上。如果我尝试使用 --deploy-mode cluster
运行它,它会在 HelloWorld jar 上给我一个 File Not Found 错误。
总结一下
我对客户端/集群部署模式的区别感到困惑 我不确定应该在哪里(即哪个节点)执行spark-submit
命令
我不明白是否应该在每个工作人员上手动复制 jar,或者是否有更好的方法来分发 jar 文件
感谢您的帮助!
【问题讨论】:
【参考方案1】:您可以配置 NAS,或者如果它作为 K8S Kubernetes 运行,则映射一个卷并将所需的 jar 保存在那里。然后使用--jars
标志触发提交。
【讨论】:
以上是关于如何在 Spark docker-compose 网络中提交 jar?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Zeppelin 中切换 Spark 版本以使用 Spark 3.x
spark 实战 1: 基于gettyimages spark docker image 创建spark 集群