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

时间:2016-12-13 15:11:13

标签: apache-spark yarn

火花docs有以下段落,它使纱线客户和纱线群之间的差异下降:

  

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

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

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

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

3 个答案:

答案 0 :(得分:25)

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

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

我从中理解的是,这两种策略都使用集群来分配任务;区别在于"驱动程序"运行:本地使用spark-submit,或者也可以在群集中运行。

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

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

结论:

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

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

答案 1 :(得分:16)

在YARN上运行的火花作业

在YARN上运行Spark时,每个Spark执行程序都作为YARN容器运行。当MapReduce计划一个容器并为每个任务启动一个JVM时,Spark在同一个容器中托管多个任务。这种方法可以将任务启动时间缩短几个数量级。

Spark支持两种在YARN上运行的模式,即“ yarn-cluster ”模式和“ yarn-client ”模式。大致来说,yarn-cluster模式对生产作业很有意义,yarn-client模式对于希望立即查看应用程序输出的交互式和调试用途很有意义。

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

在纱线簇模式下,驱动程序在Application Master中运行。这意味着相同的过程负责驱动应用程序和向YARN请求资源,并且此过程在YARN容器中运行。启动该应用程序的客户端在整个生命周期中都不需要坚持。

enter image description here

纱线群集模式

yarn-client模式,但不适合交互式使用Spark。需要用户输入的Spark应用程序(例如spark-shell和PySpark)需要Spark驱动程序在启动Spark应用程序的客户端进程中运行。在yarn-client模式下,仅存在Application Master来向YARN请求执行者容器。客户端与这些容器进行通信以安排它们开始后的工作:

enter image description here

yarn-client模式

此表提供了这些模式之间差异的简明列表: enter image description here

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

答案 2 :(得分:4)

在yarn-cluster模式下,驱动程序将在运行应用程序主服务器的节点上运行,而在yarn-client模式下,驱动程序将在集中式网关节点上提交作业的节点上运行。

相关问题