热释光;dr:在spark独立集群中,客户机和集群部署模式之间有什么区别?如何设置应用程序运行的模式?
我们有一个带有三台机器的spark独立群集,它们都带有spark 1.6.1:
一个主计算机,也是我们的应用程序运行的地方 spark-submit
2台相同的工人机器
从spark文档中,我看到:
(…)对于独立集群,spark目前支持两种部署模式。在客户机模式下,驱动程序的启动过程与提交应用程序的客户机相同。但是,在集群模式下,驱动程序是从集群中的一个工作进程启动的,客户机进程在完成提交应用程序的职责后立即退出,而不必等待应用程序完成。
但是,通过阅读本文,我并没有真正理解实际的差异,也没有了解不同部署模式的优缺点。
另外,当我使用start submit启动应用程序时,即使我设置了属性 spark.submit.deployMode
对于“集群”,我的上下文的spark ui显示以下条目:
因此,我无法测试这两种模式,以看到实际的差异。话虽如此,我的问题是:
1) spark独立客户端部署模式和集群部署模式之间的实际区别是什么?使用每种方法的利弊是什么?
2) 如何使用 spark-submit
?
3条答案
按热度按时间wb1gzix01#
我也有同样的场景,这里主节点使用独立的ec2集群。在此设置中,客户端模式是合适的。在spark submit进程中,驱动程序直接启动,该进程充当集群的客户机。应用程序的输入和输出连接到控制台。因此,这种模式特别适用于涉及repl的应用程序。
否则,如果您的应用程序是从远离工作机的机器提交的,那么使用集群模式来最小化网络延迟b/w driver&executor是很常见的。
jutyujz02#
假设您将在emr中执行spark submit,方法是对主节点执行ssh。如果您提供选项--deploy mode cluster,那么将发生以下事情。
您将无法在终端中看到详细的日志。
由于驱动程序不是在主机本身中创建的,因此您将无法从终端终止作业。
但在部署模式客户机的情况下:
您将能够在终端中看到详细的日志。
您将能够从终端本身终止作业。
这些是我迄今为止注意到的基本问题。
wkftcu5l3#
spark独立客户端部署模式和集群部署模式之间的实际区别是什么?使用每种方法的利弊是什么?
让我们看看客户机模式和集群模式之间的区别。
客户:
驱动程序在专用进程内的专用服务器(主节点)上运行。这意味着它拥有执行工作所需的所有可用资源。
驱动程序打开一个专用的nettyhttp服务器,并将指定的jar文件分发给所有工作节点(很大的优势)。
因为主节点有自己的专用资源,所以不需要为驱动程序“花费”工人资源。
如果驱动程序进程死亡,您需要一个外部监视系统来重置它的执行。
集群:
驱动程序在集群的一个工作节点上运行。工人由总领导挑选
驱动程序在工作进程中作为专用的独立进程运行。
驱动程序至少占用一个内核和一个工作进程的专用内存(可以配置)。
可以使用
--supervise
标记并在其死亡时重置。在集群模式下工作时,所有与应用程序执行相关的jar都需要对所有工作人员公开。这意味着您可以手动将它们放置在共享位置或每个worker的文件夹中。
哪一个更好?不确定,这实际上是由你来试验和决定的。这并不是一个更好的决定,你从前者和后者中获得了一些东西,这取决于你看哪一个更适合你的用例。
如何使用
spark-submit
选择运行模式的方法是使用--deploy-mode
旗帜。从spark配置页面: