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