如何在 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 ma​​ster 一个 Spark worker 使用 bitnami/spark 一个带有 Scalasbt开发容器(基于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 集群

Spark + ElasticSearch 构建电商用户标签系统实现精准营销 完整版

Loki生产环境集群方案

如何在 ovh 主机上使用 docker-compose

如何在 docker-compose 中设置主机名?