Spark-submit / spark-shell>纱线客户和纱线集群模式之间的差异

时间:2015-10-20 10:42:05

标签: apache-spark yarn

我正在使用YARN运行Spark。

从链接:http://spark.apache.org/docs/latest/running-on-yarn.html

我找到了不同纱线模式的解释,即 - master 选项,Spark可以运行:

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

请求资源。

在此,我只能理解驱动程序正在运行的区别,但我无法理解运行得更快。更多:

  • 如果运行Spark-submit,则--master可以是客户端群集
  • 相应地,Spark-shell的主选项可以是 yarn-client ,但它不支持 cluster 模式

所以我不知道如何做出选择,即何时使用spark-shell,何时使用spark-submit,特别是何时使用客户端模式,何时使用集群模式

4 个答案:

答案 0 :(得分:10)

spark-shell应该用于交互式查询,它需要在yarn-client模式下运行,以便你运行的机器充当驱动程序。

对于spark-submit,您将作业提交到群集,然后该任务在群集中运行。通常,您将以群集模式运行,以便YARN可以将驱动程序分配给具有可用资源的群集上的合适节点。

某些命令(如.collect())会将所有数据发送到驱动程序节点,这会导致驱动程序节点位于群集内部或群集外部计算机(例如用户笔记本电脑)之间存在显着的性能差异

答案 1 :(得分:6)

出于学习目的,客户端模式已经足够了。在生产环境中,您应该始终使用群集模式。

我会在一个例子的帮助下解释你。想象一下你想要启动多个应用程序的场景。比方说,你有一个5节点集群,其节点为A,B,C,D,E。

工作负载将分布在所有5个工作节点上,另外1个节点也用于提交作业(比如说“A”用于此)。现在,每次使用客户端模式启动应用程序时,驱动程序进程始终在“A”上运行。

它可能适用于一些工作,但随着工作量不断增加,“A”将缺少CPU和内存等资源。

想象一下,对一个运行多个此类工作的非常大的集群会产生影响。

但是如果选择群集模式,驱动程序每次都会在“A”上运行,但会分布在所有5个节点上。在这种情况下,资源得到更均匀的利用。

希望这有助于您决定选择何种模式。

答案 2 :(得分:1)

客户端模式 - 用于要获取直接输出(本地计算机或边缘节点)的交互式查询。这将在您启动应用程序的本地计算机/边缘节点中运行驱动程序。

群集模式 - 此模式将帮助您在群集内启动驱动程序,而不管您用于提交应用程序的计算机。 YARN将添加一个应用程序主机,其中将创建此驱动程序,因此可以容错。

答案 3 :(得分:0)

这里是 link十分清晰和简单。

在群集模式下,Spark驱动程序在群集主机上的ApplicationMaster中运行。 YARN容器中的单个进程负责驱动应用程序并向YARN请求资源。启动应用程序的客户端不需要在应用程序的生存期内运行。

在客户端模式下,Spark驱动程序在提交作业的主机上运行。 ApplicationMaster仅负责从YARN请求执行者容器。容器启动后,客户端与容器进行通信以安排工作。