Spark下Yarn-Cluster和Yarn-Client的区别

简介: 转自:Spark下Yarn-Cluster和Yarn-Client的区别0 首先注意的概念ResourceManager:是集群所有应用程序的资源管理器,能够管理集群的计算资源并为每个Application分配,它是一个纯粹的调度器。

转自:Spark下Yarn-Cluster和Yarn-Client的区别


img_59b2572f99fb2d1f0a9feb735760b1a8.png

0 首先注意的概念

ResourceManager:是集群所有应用程序的资源管理器,能够管理集群的计算资源并为每个Application分配,它是一个纯粹的调度器。 

NodeManager:是每一台slave机器的代理,执行应用程序,并监控应用程序的资源使用情况。 

Application Master:每一个应用程序都会有一个Application Master,它的主要职责是向RM申请资源、在每个NodeManager上启动executors、监控和跟踪应用程序的进程等。

1 Yarn-Cluster


img_d59c1e25dff34b68611e2e838f050964.png

执行过程: 

(1)客户端提交Application到RM,这个过程做的工作有判断集群资源是否满足需求、读取配置文件、设置环境变量、设置Application名字等等; 

(2)RM在某一台NodeManager上启动Application Master,AM所在的机器是YARN分配的,事先是不知道的; 

(3)AM初始化SparkContext,开始驱动程序,这个NodeManager便是Driver; 

(4)AM向ResourceManager申请资源,并在每台NodeManager上启动相应的executors; 

(5)初始化后的SparkContext中的通信模块可以通过AKKA与NodeManager上的容器进行通信。 

比以前的更多的理解: 

(1)Application Master所在的NodeManager是Yarn随机分配的,不是在主节点上,下图是实验室集群上跑得一个Spark程序,tseg0是主节点,tseg1~tseg4是workers,IP10.103.240.29指的是tseg3: 


img_e300543b89f98861704d9b317d327efe.png

(2)在上图还可以看出,executor的容器和AM容器是可以共存的,它们的封装都是容器; 

(3)AM是Yarn启动的第一个容器; 

(4)AM所在的NodeManager就是平常说的Driver端,因为这个AM启动了SparkContext,之前实验室说的“谁初始化的SparkContext谁就是Driver端”一直理解错了,以为这句话是相对于机器说的,但其实是相对于Cluster和Client的集群模式来说的(不知道其他模式Mesos、standalone是不是也是这样)。 

(5)在Application提交到RM上之后,Client就可以关闭了,集群会继续运行提交的程序,在实际使用时,有时候会看到这样一种现象,关闭Client会导致程序终止,其实这个Application还没有提交上去,关闭Client打断了提交的过程,Application当然不会运行。

YARN-Client


img_e3cefa9ae7a9e323d3c3be55108d54c4.png

(1)Client Application会初始化SparkContext,这是Driver端; 

(2)提交Application到RM; 

(3)应该是在RM所在的机器上启动AM(?不确定); 

(4)AM向RM申请资源,并启动NodeManager上的Executors; 

(5)Executors与SparkContext初始化后的通信模块保持通信,因为是与Client端通信,所以Client不能关闭。

YARN-Cluster和YARN-Client的区别

(1)SparkContext初始化不同,这也导致了Driver所在位置的不同,YarnCluster的Driver是在集群的某一台NM上,但是Yarn-Client就是在RM在机器上; 

(2)而Driver会和Executors进行通信,这也导致了Yarn_cluster在提交App之后可以关闭Client,而Yarn-Client不可以; 

(3)最后再来说应用场景,Yarn-Cluster适合生产环境,Yarn-Client适合交互和调试。

由此想到的Spark多用户OnYarnCluster

之前实验室配过Hadoop多用户,最近因为培训Spark,又得在这个基础上再能够运行Spark。做的工作很简单,就是把Spark以及Spark依赖的环境scp过去,然后再改一下相应的配置就可以了。猜想的不同用户运行Spark On Yarn Cluster如下图所示,无非就是多增加了一个用户Client,因为ResourceManager是唯一的,所以不同用户CLient提交的Spark Application在集群上运行都是一样的。 

img_22da019d5517bd8350dcf4628e216142.png

Reference

《Spark技术内幕-深入解析Spark内核、架构设计与实现原理》

Spark Yarn-cluster与Yarn-client

Spark:Yarn Cluster 和Yarn Client的区别和联系

目录
相关文章
|
分布式计算 数据处理 Apache
Spark和Flink的区别是什么?如何选择?都应用在哪些行业?
【10月更文挑战第10天】Spark和Flink的区别是什么?如何选择?都应用在哪些行业?
2359 1
|
SQL 分布式计算 资源调度
Dataphin功能Tips系列(48)-如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
551 4
|
缓存 分布式计算 资源调度
Spark 与 MapReduce 的 Shuffle 的区别?
MapReduce 和 Spark 在 Shuffle 过程中有显著区别。MapReduce 采用两阶段模型,中间数据写入磁盘,I/O 开销大;而 Spark 使用基于内存的多阶段执行模型,支持操作合并和内存缓存,减少 I/O。Spark 的 RDD 转换优化减少了 Shuffle 次数,提升了性能。此外,Spark 通过 lineage 实现容错,资源管理更灵活,整体大数据处理效率更高。
|
存储 资源调度 JavaScript
一文带你了解PNPM以及 npm,yarn,pnpm区别
一文带你了解PNPM以及 npm,yarn,pnpm区别
1426 9
|
分布式计算 资源调度 Hadoop
Spark Standalone与YARN的区别?
本文详细解析了 Apache Spark 的两种常见部署模式:Standalone 和 YARN。Standalone 模式自带轻量级集群管理服务,适合小规模集群;YARN 模式与 Hadoop 生态系统集成,适合大规模生产环境。文章通过示例代码展示了如何在两种模式下运行 Spark 应用程序,并总结了两者的优缺点,帮助读者根据需求选择合适的部署模式。
871 3
|
分布式计算 资源调度 Hadoop
Spark Standalone与YARN的区别?
【10月更文挑战第5天】随着大数据处理需求的增长,Apache Spark 成为了广泛采用的大数据处理框架。本文详细解析了 Spark Standalone 与 YARN 两种常见部署模式的区别,并通过示例代码展示了如何在不同模式下运行 Spark 应用程序。Standalone 模式自带轻量级集群管理,适合小规模集群或独立部署;YARN 则作为外部资源管理器,能够与 Hadoop 生态系统中的其他应用共享资源,更适合大规模生产环境。文章对比了两者的资源管理、部署灵活性、扩展性和集成能力,帮助读者根据需求选择合适的部署模式。
485 1
|
资源调度 分布式计算 Hadoop
YARN(Hadoop操作系统)的架构
本文详细解释了YARN(Hadoop操作系统)的架构,包括其主要组件如ResourceManager、NodeManager和ApplicationMaster的作用以及它们如何协同工作来管理Hadoop集群中的资源和调度作业。
1070 3
YARN(Hadoop操作系统)的架构
|
资源调度 分布式计算 Hadoop
使用YARN命令管理Hadoop作业
本文介绍了如何使用YARN命令来管理Hadoop作业,包括查看作业列表、检查作业状态、杀死作业、获取作业日志以及检查节点和队列状态等操作。
905 1
使用YARN命令管理Hadoop作业
|
资源调度 分布式计算 算法
【揭秘Yarn调度秘籍】打破资源分配的枷锁,Hadoop Yarn权重调度全攻略!
【8月更文挑战第24天】在大数据处理领域,Hadoop Yarn 是一种关键的作业调度与集群资源管理工具。它支持多种调度器以适应不同需求,默认采用FIFO调度器,但可通过引入基于权重的调度算法来提高资源利用率。该算法根据作业或用户的权重值决定资源分配比例,权重高的可获得更多计算资源,特别适合多用户共享环境。管理员需在Yarn配置文件中启用特定调度器(如CapacityScheduler),并通过设置队列权重来实现资源的动态调整。合理配置权重有助于避免资源浪费,确保集群高效运行,满足不同用户需求。
410 3