Apache Spark:客户端和集群部署模式之间的差异

时间:2016-05-04 12:23:32

标签: apache-spark apache-spark-standalone

TL; DR:在Spark Standalone群集中,客户端和群集部署模式之间有什么区别?如何设置我的应用程序将在哪种模式下运行?

我们有一个包含三台计算机的Spark Standalone集群,所有计算机都使用Spark 1.6.1:

  • 主机,也是使用spark-submit
  • 运行我们的应用程序的地方
  • 2台相同的工人机器

Spark Documentation开始,我读到了:

  

(...)对于独立群集,Spark目前支持两种部署模式。在客户端模式下,驱动程序在与提交应用程序的客户端相同的进程中启动。但是,在集群模式下,驱动程序是从集群内的一个Worker进程启动的,客户端进程一旦履行其提交应用程序的责任就退出,而无需等待应用程序完成。

但是,通过阅读本文,我并不真正了解实际差异,而且我不了解不同部署模式的优缺点。

此外,当我使用start-submit启动我的应用程序时,即使我将属性spark.submit.deployMode设置为“cluster”,我的上下文的Spark UI也显示以下条目:

Context UI

所以我无法测试两种模式以查看实际差异。话虽这么说,我的问题是:

1)Spark Standalone 客户端部署模式和集群部署模式之间的实际区别是什么?使用每一个的专业人士和合作伙伴是什么?

2)如何使用spark-submit选择运行我的应用程序?

3 个答案:

答案 0 :(得分:51)

  

Spark Standalone客户端之间存在哪些实际差异   部署模式和集群部署模式?什么是赞成和赞成   使用每一个?

让我们试着看看客户端和集群模式之间的差异。

客户端:

  • 驱动程序在专用进程内的专用服务器(主节点)上运行。这意味着它拥有可用于执行工作的所有可用资源。
  • 驱动程序打开一个专用的Netty HTTP服务器,并将指定的JAR文件分发给所有工作节点(大优势)。
  • 由于主节点拥有自己的专用资源,因此您无需为驱动程序“花费”工作资源。
  • 如果驱动程序进程终止,则需要一个外部监视系统来重置它的执行。

集群:

  • 驱动程序在集群的其中一个Worker节点上运行。该工作人员由主要领导人选择
  • 驱动程序在Worker 中作为专用的独立进程运行。
  • 驱动程序占用至少 1核心以及其中一名工作人员的专用内存(可以配置)。
  • 可以使用--supervise标志从主节点监控驱动程序,并在其死机时重置。
  • 在群集模式下工作时,与应用程序执行相关的所有JAR都需要公开供所有工作人员使用。这意味着您可以手动将它们放在共享位置或每个工作人员的文件夹中。

哪一个更好?不确定,这实际上是你的实验和决定。这不是更好的决定,你可以从前者和后者中获得一些东西,由你来决定哪一个更适合你的用例。

  

如何选择运行我的应用程序的那个,   使用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,则会发生以下情况。

  1. 您将无法在终端中查看详细日志。
  2. 由于未在Master本身中创建驱动程序,因此您将无法从终端终止作业。

但是对于--deploy-mode客户端:

  1. 您将能够在终端中查看详细的日志。
  2. 您将能够从终端本身终止作业。

这些是我到目前为止所注意到的基本内容。