TL; DR:在Spark Standalone群集中,客户端和群集部署模式之间有什么区别?如何设置我的应用程序将在哪种模式下运行?
我们有一个包含三台计算机的Spark Standalone集群,所有计算机都使用Spark 1.6.1:
spark-submit
从Spark Documentation开始,我读到了:
(...)对于独立群集,Spark目前支持两种部署模式。在客户端模式下,驱动程序在与提交应用程序的客户端相同的进程中启动。但是,在集群模式下,驱动程序是从集群内的一个Worker进程启动的,客户端进程一旦履行其提交应用程序的责任就退出,而无需等待应用程序完成。
但是,通过阅读本文,我并不真正了解实际差异,而且我不了解不同部署模式的优缺点。
此外,当我使用start-submit启动我的应用程序时,即使我将属性spark.submit.deployMode
设置为“cluster”,我的上下文的Spark UI也显示以下条目:
所以我无法测试两种模式以查看实际差异。话虽这么说,我的问题是:
1)Spark Standalone 客户端部署模式和集群部署模式之间的实际区别是什么?使用每一个的专业人士和合作伙伴是什么?
2)如何使用spark-submit
选择运行我的应用程序?
答案 0 :(得分:51)
Spark Standalone客户端之间存在哪些实际差异 部署模式和集群部署模式?什么是赞成和赞成 使用每一个?
让我们试着看看客户端和集群模式之间的差异。
客户端:
集群:
--supervise
标志从主节点监控驱动程序,并在其死机时重置。哪一个更好?不确定,这实际上是你的实验和决定。这不是更好的决定,你可以从前者和后者中获得一些东西,由你来决定哪一个更适合你的用例。
如何选择运行我的应用程序的那个, 使用
spark-submit
选择运行模式的方法是使用--deploy-mode
标志。来自Spark Configuration页面:
/bin/spark-submit \
--class <main-class>
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
答案 1 :(得分:1)
我也有相同的场景,这里主节点使用独立的ec2集群。在此设置中,客户端模式是合适的。在此驱动程序中直接启动spark-submit进程,该进程充当集群的客户端。输入&amp;应用程序的输出附加到控制台。因此,此模式特别适用于涉及REPL的应用程序。
否则,如果您的应用程序是从远离工作机器的计算机提交的,那么使用群集模式来最小化网络延迟是很常见的。执行程序。
答案 2 :(得分:0)
假设您要通过对主节点执行SSH在EMR中执行Spark提交。 如果提供选项--deploy-mode cluster,则会发生以下情况。
但是对于--deploy-mode客户端:
这些是我到目前为止所注意到的基本内容。