我在集群中运行了Spark(远程)
如何使用spark-submit将应用程序提交到具有以下场景的远程集群:
spark-submit通过骆驼作为命令执行
应用程序在其自己的容器中运行。
通过以下链接:
https://github.com/mvillarrealb/docker-spark-cluster
https://github.com/big-data-europe/docker-spark
我们可以提交spark应用程序,但是我们已经将文件和jar复制到了卷中。
如何避免这种情况?
有什么办法吗?
答案 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
注意: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