Apache spark Spark纱线集群与客户端-如何选择使用哪种?

Apache spark Spark纱线集群与客户端-如何选择使用哪种?,apache-spark,yarn,Apache Spark,Yarn,spark有以下段落描述了纱线客户机和纱线簇之间的区别: 有两种部署模式可用于在纱线上启动Spark应用程序。在集群模式下,Spark驱动程序在应用程序主进程内运行,该主进程由集群上的Thread管理,客户端可以在启动应用程序后离开。在客户机模式下,驱动程序在客户机进程中运行,而应用程序主控程序仅用于从应用程序请求资源 我假设有两种选择是有原因的。如果是,您如何选择使用哪一个 请使用事实证明您的回答,以便此问题和答案符合stackoverflow的要求 关于stackoverflow有一些类似的

spark有以下段落描述了纱线客户机和纱线簇之间的区别:

有两种部署模式可用于在纱线上启动Spark应用程序。在集群模式下,Spark驱动程序在应用程序主进程内运行,该主进程由集群上的Thread管理,客户端可以在启动应用程序后离开。在客户机模式下,驱动程序在客户机进程中运行,而应用程序主控程序仅用于从应用程序请求资源

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

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


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

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

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

我从中了解到,这两种策略都使用集群来分发任务;区别在于“驱动程序”运行的位置:使用spark submit在本地运行,或者也在集群中运行

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

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

结论:
  • 总之,如果我与集群位于同一个本地网络中,我会 使用客户端模式并从我的笔记本电脑提交。如果群集 在很远的地方,我要么以集群模式本地提交,要么
    rsync
    将jar发送到远程集群,并在客户端或 群集模式,取决于驱动程序的启动程度 资源*
a如果驱动程序在集群中运行,则不易受到远程断开连接导致驱动程序和整个spark作业崩溃的影响。这对于长时间运行的作业(如流处理类型的工作负载)尤其有用。


在纱线上运行火花作业

在纱线上运行Spark时,每个Spark executor都作为纱线容器运行。MapReduce为每个任务调度一个容器并启动一个JVM,Spark在同一个容器中承载多个任务。这种方法使任务启动时间加快了几个数量级

Spark支持在纱线上运行的两种模式,“纱线簇”模式和“纱线客户端”模式。广义上,纱线簇模式对生产作业有意义,而纱线客户端模式对交互和调试使用有意义,您可以在其中立即看到应用程序的输出

理解差异需要理解YARN的应用程序主进程概念。在YARN中,每个应用程序实例都有一个应用程序主进程,它是为该应用程序启动的第一个容器。应用程序负责向ResourceManager请求资源,并在分配资源时通知NodeMa管理者代表其启动容器。应用程序主控程序消除了对活动客户端的需要-启动应用程序的进程可以离开,而协调可以从集群上运行的由Thread管理的进程继续进行

在纱线集群模式下,驱动程序在应用程序主机中运行。这意味着相同的进程负责驱动应用程序和向纱线请求资源,并且此进程在纱线容器中运行。启动应用程序的客户端不需要在其整个生命周期中一直运行

纱团模式

纱线群集模式不适合交互使用Spark,但纱线客户端模式是。需要用户输入的Spark应用程序,如Spark shell和PySpark,需要Spark驱动程序在启动Spark应用程序的客户端进程内运行。在纱线客户端模式下,应用程序主机仅存在从Thread请求executor容器。客户机与这些容器通信