如何远程运行Spark-Submit?

时间:2019-11-28 14:09:52

标签: docker apache-spark apache-camel 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复制到了卷中。

如何避免这种情况?

有什么办法吗?

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用在spark主节点上运行的livy rest服务器。这允许您仅通过在本地打包作业并使用Submit rest api来提交作业。现在,默认情况下,许多火花云提供商都提供Livy。 (AWS,Azure,Hortonworks) 参见doc

我仍然认为仅通过在本地安装相同的Spark驱动程序就可以提交。但是我放弃了这一点。特别是如果使用yarn,我找不到合适的配置以及要连接的端口。

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

将代码部署到群集上的临时位置,然后用户进行火花提交或使用定义良好的livy api端点是一种不错的方法。

有关有关群集内连接的注释的更新:

在一堆火花机和安装在每台计算机上的适当驱动程序中,一个人可以从任何计算机提交作业。同样,在群集管理员中,端口也开放给所有参与的计算机。

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

./bin/spark-submit \
  --class <main-class \
  --master <master-url> \ 
  <application-jar>

没有dns和yarn,主网址看起来像这样-spark://192.168.1.1:7077(火花协议,主节点/ vm的IP,端口)

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

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

注意: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")

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