Spark yarn cluster vs client - 如何选择使用哪一个?

Chr*_*now 21 hadoop-yarn apache-spark

spark 文档具有以下段落,它使纱线客户端和纱线簇之间的差异在下降:

有两种部署模式可用于在YARN上启动Spark应用程序.在集群模式下,Spark驱动程序在应用程序主进程内运行,该进程由群集上的YARN管理,客户端可以在启动应用程序后消失.在客户端模式下,驱动程序在客户端进程中运行,应用程序主服务器仅用于从YARN请求资源.

我假设有两个选择是有原因的.如果是这样,你如何选择使用哪一个?

请使用事实证明您的回答是正确的,以便此问题和答案符合stackoverflow的要求.

stackoverflow上有一些类似的问题,但是这些问题集中在两种方法之间的差异,但不关注何时一种方法比另一种方法更合适.

Ram*_*ram 28

常见的部署策略是从与您的工作机器物理位于同一位置的网关机器(例如,独立EC2集群中的主节点)提交您的应用程序.在此设置中,客户端模式是合适的.在客户端模式下,驱动程序直接在spark-submit进程中启动,该进程充当群集的客户端.应用程序的输入和输出附加到控制台.因此,此模式特别适用于涉及REPL的应用程序(例如Spark shell).

或者,如果您的应用程序是从远离工作机器的计算机提交的(例如,在笔记本电脑上本地提交),则通常使用集群模式来最小化驱动程序和执行程序之间的网络延迟.请注意,Mesos群集当前不支持群集模式.目前只有YARN支持Python应用程序的集群模式." - 提交应用程序

我从中理解的是,两种策略都使用集群来分配任务; 不同之处在于"驱动程序"运行的地方:本地使用spark-submit,或者也在群集中.

当你应该使用它们中的任何一个时,在上面的引用中详细说明,但我也做了另一件事:对于大罐子,我使用rsync将它们以100倍的网络速度复制到集群(甚至主节点),然后从群集提交.这对于大罐子来说可能比"集群模式"更好.请注意,客户端模式可能不会将jar传输到主服务器.在那时,2之间的差异是最小的.当驱动程序在大多数时间处于空闲状态时,客户端模式可能更好,以充分利用本地计算机上的核心,并且可能避免将jar传输到主服务器(即使在环回接口上,大罐子需要相当长的时间) .使用客户端模式,您可以在任何群集节点上传输(rsync)jar.

另一方面,如果驱动程序非常密集,在cpu或I/O中,集群模式可能更合适,以更好地平衡集群(在客户端模式下,本地计算机将同时运行驱动程序和尽可能多的工作程序,使其过载并使本地任务变慢,使得整个工作可能最终等待来自本地机器的几个任务).

结论:

  • 总而言之,如果我与群集在同一个本地网络中,我会使用客户端模式并从我的笔记本电脑提交它.如果群集很远,我会在本地提交群集模式,或者rsync 将jar提交到远程群集并在客户端或群集模式下提交,具体取决于驱动程序在资源上的重量.*

AFAIK随着驱动程序在群集中运行,它不易受到远程断开连接导致驱动程序崩溃和整个火花作业的影响.这对于长时间运行的作业(如流处理类型工作负载)尤其有用.


Thi*_*ati 23

在YARN上运行的Spark作业

在YARN上运行Spark时,每个Spark执行程序都作为YARN容器运行.在MapReduce为每个任务调度容器并启动JVM的情况下,Spark在同一容器中承载多个任务.这种方法可以使任务启动时间快几个数量级.

Spark支持两种在YARN上运行的模式," 纱线群集 "模式和" 纱线客户端 "模式.从广义上讲,纱线群集模式对于生产作业是有意义的,而纱线客户端模式对于您希望立即查看应用程序输出的交互式和调试用途是有意义的.

了解差异需要了解YARN的Application Master概念.在YARN中,每个应用程序实例都有一个Application Master进程,该进程是为该应用程序启动的第一个容器.应用程序负责从ResourceManager请求资源,并在分配资源时告诉NodeManagers代表它启动容器.应用程序主服务器不需要活动客户端 - 启动应用程序的过程可以消失,并且协调将从群集上运行的YARN管理的进程继续进行.

在纱线群集模式下,驱动程序在Application Master中运行.这意味着同一进程负责驱动应用程序和从YARN请求资源,并且此进程在YARN容器内运行.启动应用程序的客户端不需要在其整个生命周期内坚持使用.

在此输入图像描述

纱线集群模式

然而,yarn-client模式不适合以交互方式使用Spark.需要用户输入的Spark应用程序(如spark-shell和PySpark)需要Spark驱动程序在启动Spark应用程序的客户端进程内运行.在纱线客户端模式下,Application Master仅用于向YARN请求执行器容器.客户端与这些容器通信以在工作开始后安排工作:

在此输入图像描述

纱线客户模式

此表提供了这些模式之间差异的简明列表: 在此处输入图像描述

参考:https://blog.cloudera.com/blog/2014/05/apache-spark-resource-management-and-yarn-app-models/

  • 谢谢你的回答;这非常有帮助。但是,仅检查一下:您的意思是“但是,纱线群集模式不太适合交互式使用Spark”吗? (5认同)