我理解客户机模式和集群模式在yarn上的spark应用程序之间的主要区别。
主要区别包括
驱动程序在哪里运行-clinet模式下为local,集群模式下为application master
客户端运行持续时间-在clinet模式下,客户端需要在整个持续时间内运行,在集群模式下,客户端不需要在am处理它时运行
交互式使用-spark shell和pyspark。群集模式不太适合,因为这需要在客户端上运行驱动程序
调度工作—在客户机模式下,客户机通过直接与容器通信来调度工作。在集群模式下,a通过直接与容器通信来调度工作
在这两种情况下的相似性
谁来处理Yarn应用主管的执行请求
谁启动执行者进程-Yarn节点管理器
我的问题是——在现实世界场景(生产环境)中,我们不需要交互模式,客户端不需要长时间运行——集群模式是一个明显的选择吗?
客户端模式是否有以下好处:
在客户机而不是am上运行驱动程序
允许客户安排工作,而不是am
2条答案
按热度按时间aurhwmvo1#
根据我的经验,在生产环境中,唯一合理的模式是集群模式,但有两个例外:
当hadoop节点没有应用程序所需的资源时,例如:在执行结束时,spark job执行
ssh
无法从hadoop节点访问的服务器当您使用spark流并且希望优雅地关闭它时(终止集群模式应用程序将强制关闭流,如果您在客户机模式下运行,则可以调用
ssc.stop(stopGracefully = true)
fjaof16o2#
从文件来看,
一种常见的部署策略是从与工作机(例如独立ec2集群中的主节点)物理上共存的网关机提交应用程序。在此设置中,客户端模式是合适的。在客户机模式下,驱动程序直接在客户机spark提交过程中启动,应用程序的输入和输出连接到控制台。因此,该模式特别适用于涉及repl的应用(例如Spark壳)。
或者,如果您的应用程序是从远离工作机器的机器提交的(例如,在笔记本电脑上本地),则通常使用群集模式来最小化驱动程序和执行程序之间的网络延迟。请注意,独立集群、mesos集群或python应用程序当前不支持集群模式。
看起来,主要原因是当我们从远程运行spark submit时,为了减少执行器和驱动程序之间的延迟,首选集群模式。