Spark-submit/spark-shell> yarn-client和yarn-cluster模式之间的区别

Rui*_*Rui 9 hadoop-yarn apache-spark

我用YARN运行Spark.

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

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

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

在此,我只能理解不同的是驱动程序在哪里运行,但我无法理解哪个运行得更快.Morevover:

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

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

Ewa*_*ith 11

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

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

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


小智 6

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

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

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

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

想象一下,对一个运行多个这样的工作的非常大的集群的影响.

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

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