如何远程运行 spark-submit?

Pku*_*mar 6 apache-camel docker apache-spark spark-submit

我在集群中运行 Spark(远程)

如何使用 spark-submit 将应用程序提交到具有以下场景的远程集群:

  1. spark-submit 通过骆驼作为命令执行

  2. 应用程序在它自己的容器中运行。

从以下链接:

https://github.com/mvillarrealb/docker-spark-cluster

https://github.com/big-data-europe/docker-spark

我们可以提交 spark 应用程序,但我们已将文件和 jar 复制到卷中。

我如何避免这种情况?

有什么办法吗?

dre*_*-hh 6

最简单的方法是使用在 spark 主节点上运行的 livy rest 服务器。这允许您仅通过在本地打包并使用提交休息 api 来提交作业。Livy 现在默认有很多 Spark 云提供商。(AWS、Azure、Hortonworks)见文档

我仍然相信只要在本地安装相同的 Spark 驱动程序就可以提交。然而我放弃了这个。特别是如果使用纱线,我找不到合适的配置以及要连接的端口。

实际上这也不是一个好的操作设置,因为您的机器需要加入集群网络或打开特定端口。并且您的本地机器也开始参与 spark 协议。

将代码部署到集群上的临时位置,然后用户 spark-submit 或使用定义良好的 livy api 端点是一个很好的方法。

关于集群内连接的评论的更新:

在一组 Spark 机器和安装在每台机器上的适当驱动程序中,可以从任何机器提交作业。同样在集群管理员中,端口对所有参与的机器开放。

spark-submit 命令有一个 master-url 参数。这个 url 必须使用 spark 协议:

./bin/spark-submit \
  --class <main-class \
  --master <master-url> \ 
  <application-jar>
Run Code Online (Sandbox Code Playgroud)

如果没有 dns 和 yarn,主 url 看起来像这样 - spark://192.168.1.1:7077(spark 协议,主节点/vm 的 ip,端口)

我已经使用 docker-compose 进行了类似的设置。 https://github.com/dre-hh/spark_playground

  • 有 3 种类型的节点具有自记录名称: spark-masterspark-workerspark-submit
  • appcode 仅由build部署到 spark-submit 节点 命令。这是唯一一个在本地构建的 docker 镜像。它继承自 spark-image。因此它具有与其他节点完全相同的火花驱动器。此外,它将 git repo(包括作业)中的所有项目代码复制到节点上的特定文件夹中。
  • 所有其他节点都是从 docker 注册表上的官方镜像构建的,并且保持不变(除了一些配置)。
  • 最后,可以从 spark-submit 节点使用 spark-submit。然而,在这个例子中,我刚刚启动了一个交互式jupyter 笔记本并从应用程序代码本身连接。

注意:docker-compose 自动带有 dns,所以我不必通过 ip 引用节点。

 # "spark-master" will automatically resolve to the ip of the master node because of docker-compose naming convention and dns rules
 pyspark.SparkContext(master="spark://spark-master:7077", appName="Pi")

Run Code Online (Sandbox Code Playgroud)

https://github.com/dre-hh/spark_playground/blob/master/docker-compose.yml#L48