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

Dan*_*ula 36 apache-spark apache-spark-standalone

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


我们有一个带有三台机器的Spark Standalone集群,它们都使用Spark 1.6.1:

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

Spark文档中,我读到:

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

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

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

上下文UI

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

1)Spark Standalone 客户端部署模式和集群部署模式之间有哪些实际区别?使用每个人的专业和利益是什么?

2)如何选择我的应用程序将运行哪一个,使用spark-submit

Yuv*_*kov 54

Spark Standalone客户端部署模式和集群部署模式之间的实际区别是什么?使用每个人的专业和利益是什么?

让我们试着看一下客户端和集群模式之间的区别.

客户:

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

簇:

  • 驱动程序在集群的其中一个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]
Run Code Online (Sandbox Code Playgroud)


Sum*_*van 6

假设您要通过对主节点执行 SSH 来在 EMR 中执行 spark 提交。如果您提供选项 --deploy-mode cluster,则会发生以下情况。

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

但在 --deploy-mode 客户端的情况下:

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

这些是我迄今为止注意到的基本事情。