[英]Apache Spark: Differences between client and cluster deploy modes
TL; DR:在Spark Standalone群集中,客户端部署模式和群集部署模式之间有什么区别? 如何设置应用程序将在哪种模式下运行?
我们有一个Spark Standalone集群,其中包含三台机器,所有这些机器都带有Spark 1.6.1:
spark-submit
运行应用程序的地方 从Spark文档中 ,我读到:
(...)对于独立群集,Spark当前支持两种部署模式。 在客户端模式下,驱动程序以与提交应用程序的客户端相同的过程启动。 但是,在群集模式下,驱动程序是从群集内的一个Worker进程中启动的,并且客户端进程在履行其提交应用程序的职责而无需等待应用程序完成时立即退出。
但是,通过阅读本文,我并不能真正理解实际的差异,也无法了解不同部署模式的优缺点。
另外,即使我将属性spark.submit.deployMode
设置为“ cluster”,使用start-submit启动应用程序时,上下文的Spark UI spark.submit.deployMode
显示以下条目:
因此,我无法测试两种模式以查看实际差异。 话虽如此,我的问题是:
1)Spark Standalone 客户端部署模式和集群部署模式之间的实际区别是什么? 使用每个优点和缺点的分别是什么?
2)如何使用spark-submit
选择我的应用程序将在哪个应用程序上运行?
Spark Standalone客户端部署模式和集群部署模式之间的实际区别是什么? 使用每个优点和缺点的分别是什么?
让我们尝试看看客户端模式和集群模式之间的区别。
客户:
簇:
--supervise
标志从主节点监视驱动程序,并在驱动程序--supervise
进行重置。 哪一个更好? 不确定,这实际上是您可以尝试和决定的。 这不是一个更好的决定,您会从前者和后者中受益,这取决于您哪种情况更适合您的用例。
如何使用
spark-submit
选择我的应用程序将在哪个应用程序上运行
选择运行哪种模式的方法是使用--deploy-mode
标志。 从“ Spark配置”页面:
/bin/spark-submit \
--class <main-class>
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
假设您要通过对主节点执行SSH在EMR中执行Spark提交。 如果提供选项--deploy-mode cluster,则会发生以下情况。
但是在--deploy-mode客户端的情况下:
这些是到目前为止我已经注意到的基本内容。
我也有同样的情况,这里的主节点使用一个独立的ec2集群。 在这种设置下,客户端模式是合适的。 在该驱动程序中,它是通过火花提交过程直接启动的,该过程充当群集的客户端。 应用程序的输入和输出已附加到控制台。因此,此模式特别适用于涉及REPL的应用程序。
否则,如果您的应用程序是从远离工作器的计算机上提交的,那么使用群集模式来最小化网络延迟的黑白驱动程序和执行程序是很普遍的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.