1.YARN源码剖析:NM启动过程
2.Spark源码分析——yarn-cluster模式下Application提交源码实现
3.深入浅出 Yarn 架构与实现4-2 RM 管理 Application Master
4.Spark源码解析2-YarnCluster模式启动
5.yarnçå®è£
6.深入理解 Hadoop (七)YARN资源管理和调度详解
YARN源码剖析:NM启动过程
NodeManager初始化和启动过程主要涉及配置文件读取,源码资源信息配置,分析以及服务启动等步骤。源码重点在于初始化阶段,分析配置文件读取完成,源码包括关于节点资源信息的分析读懂dubbo源码配置。
启动NodeManager(NM)时,源码遵循与ResourceManager(RM)类似的分析逻辑,启动各个服务。源码关键在于nodeStatusUpdater模块。分析其中两个重要方法为registerWithRM()和startStatusUpdater()。源码这两个方法通过RPC远程调用ResourceManager中的分析两个接口:registerNodeManager()和nodeHeartbeat()。
NM启动过程中添加的源码服务列表构成其核心功能描述。例如,分析NodeHealthCheckerService提供节点健康检查功能,源码包含两个子service:NodeHealthScriptRunner(使用配置的脚本进行健康检查)和LocalDirsHandlerService(检查磁盘健康状况)。此服务包含getHealthReport()方法,用于获取健康检查结果。
NM中的关键类之一为NMContext,它作为组件间信息共享的接口。
NM与RM之间的心跳通信是整个过程中不可或缺的部分,确保了资源管理系统的实时状态监控与资源分配协调。
综上所述,NodeManager的启动过程涉及初始化配置、启动关键服务以及与ResourceManager的交互,实现资源管理和节点健康监控等功能。这一过程为YARN框架提供了稳定、高效的造物源码系列基础结构。
Spark源码分析——yarn-cluster模式下Application提交源码实现
Spark源码深入解析:yarn-cluster模式下Application提交的详细流程 Spark客户端在yarn-cluster模式下的核心入口是org.apache.spark.deploy.yarn.Client,这个客户端主要职责是向ResourceManager提交并监控Application的运行。以下是对submit源码的深入剖析: 1. 客户端入口与主要方法: Client的main方法首先创建Client实例并执行run()方法,run()方法是核心操作。 2. submitApplication()核心实现: run()方法中的关键步骤是submitApplication(),它包含了以下内容:初始化Yarn客户端,通过org.apache.hadoop.yarn.client.api.YarnClient实现,向RM申请新应用,生成YarnClientApplication。
检查用户提交的资源(如executorMemory、driverMemory)是否合法,确保不超过单个container的最大资源。
创建ContainerLaunchContext,包括上传依赖资源到HDFS,设置Java执行命令(包含ApplicationMaster入口类)和环境变量。
设置application的详细信息,如名称、队列、资源需求等,然后提交至RM启动ApplicationMaster进程。
3. 资源验证与container创建: 验证用户设置的资源是否满足container限制,并创建执行环境,包括打包依赖文件到HDFS,构建启动ApplicationMaster的Java命令。 4. 监控与报告: 客户端通过monitorApplication()持续监控应用状态并报告给用户,如:Application report for $appId (state: $state)。 总结来说,扶风解析源码yarn-cluster模式下,Client执行的步骤包括:创建Client实例,连接ResourceManager。
提交申请,获取applicationId和最大资源。
检查并确保资源请求合法。
构建ContainerLaunchContext,准备application的运行环境。
设置并提交application信息,启动ApplicationMaster。
持续监控并报告application状态。
这个过程完成后,ApplicationMaster的运行和Driver的控制将作为后续分析的重点。深入浅出 Yarn 架构与实现4-2 RM 管理 Application Master
深入解析 ResourceManager 对 Application Master 的管理机制,将详述 RM 与 AM 之间的通信流程及其涉及的服务。 客户端提交任务至 ResourceManager 后,AM 的启动至任务完成的流程涉及多个关键环节。具体操作细节则需参照后续服务解析。 ApplicationMaster 的管理主要由三个核心服务支撑,共同维护应用 AM 的生命周期。具体包括: ApplicationMasterLauncher 概述抽象类 AbstractLivelinessMonitor 的功能。 AMLivelinessMonitor 深入讲解 ApplicationMasterService 的角色与运作。 总结本篇内容,着重阐述 RM 中对 AM 的管理机制,涵盖与 AM 交互流程及各服务的逻辑与 RPC 调用。其中,对 ApplicationMasterLauncher 组件进行了详细解析,文章搜索源码并配图展示。其余部分,建议有兴趣的同学自行梳理。在学习时,建议对照源码进行,以便更深入理解流程。Spark源码解析2-YarnCluster模式启动
YARN 模式运行机制主要体现在Yarn Cluster 模式和Yarn Client 模式上。在Yarn Cluster模式下,SparkSubmit、ApplicationMaster 和 CoarseGrainedExecutorBackend 是独立的进程,而Driver 是独立的线程;Executor 和 YarnClusterApplication 是对象。在Yarn Client模式下,SparkSubmit、ApplicationMaster 和 YarnCoarseGrainedExecutorBackend 也是独立的进程,而Executor和Driver是对象。
在源码中,SparkSubmit阶段首先执行Spark提交命令,底层执行的是开启SparkSubmit进程的命令。代码中,SparkSubmit从main()开始,根据运行模式获取后续要反射调用的类名赋给元组中的ChildMainClass。如果是Yarn Cluster模式,则为YarnClusterApplication;如果是Yarn Client模式,则为主类用户自定义的类。接下来,获取ChildMainClass后,通过反射调用main方法的溯源码发票过程,反射获取类然后通过构造器获取一个示例并多态为SparkApplication,再调用它的start方法。随后调用YarnClusterApplication的start方法。在YarnClient中,new一个Client对象,其中包含了yarnClient = YarnClient.createYarnClient属性,这是Yarn在SparkSubmit中的客户端,yarnClient在第行初始化和开始,即连接Yarn集群或RM。之后就可以通过这个客户端与Yarn的RM进行通信和提交应用,即调用run方法。
ApplicationMaster阶段主要涉及开启一个Driver新线程、AM向RM注册、AM向RM申请资源并处理、封装ExecutorBackend启动命令以及AM向NM通信提交命令由NM启动ExecutorBackend。在ApplicationMaster进程中,首先开启Driver线程,开始运行用户自定义代码,创建Spark程序入口SparkContext,接着创建RDD,生成job,划分阶段提交Task等操作。
在申请资源之前,AM主线程创建了Driver的终端引用,作为参数传入createAllocator(),因为Executor启动后需要向Driver反向注册,所以启动过程必须封装Driver的EndpointRef。AM主线程向RM申请获取可用资源Container,并处理这些资源。ExecutorBackend阶段尚未完成,后续内容待补充。
yarnçå®è£
è¿æ®µæ¶é´æ vue3çæºç ï¼å¨å¼å§æ¶ï¼å°±ç¢°å°äºyarnçå®è£ é®é¢
æ¿å°æºç ï¼npm installï¼å¾å¥½ï¼æ¥éï¼
æ¥ä¸æ¥å®è£ yarnï¼
å¨vscodeéé¢å®è£ yarnçæ¶åï¼npm install -g yarn æ§è¡æåï¼
ä½æ¯å¨æ¥ççæ¬yarn -versionçæ¶åæ¥éï¼å¦ä¸ï¼
æåæ¯éè¦å¨ç¯å¢åééé¢é 置系ç»åéï¼å°åå°±æ¯npm install -g yarnçæ¶åè¿åçè·¯å¾ï¼æçå¦ä¸ï¼
ä¸å¾æ¯å ¶ä»äººä¸æ¬¡æ§è¡æåçæªå¾ååºæ¥çæ¯ç¯å¢åéé ç½®å°å
深入理解 Hadoop (七)YARN资源管理和调度详解
Hadoop最初为批处理设计,其资源管理与调度仅支持FIFO机制。然而,随着Hadoop的普及与用户量的增加,单个集群内的应用程序类型与数量激增,FIFO调度机制难以高效利用资源,也无法满足不同应用的服务质量需求,故需设计适用于多用户的资源调度系统。
YARN采用双层资源调度模型:ResourceManager中的资源调度器分配资源给ApplicationMaster,由YARN决定;ApplicationMaster再将资源分配给内部任务Task,用户自定。YARN作为统一调度系统,满足调度规范的分布式应用皆可在其中运行,调度规范包括定义ApplicationMaster向RM申请资源,AM自行完成Container至Task分配。YARN采用拉模型实现异步资源分配,RM分配资源后暂存缓冲区,等待AM通过心跳获取。
Hadoop-2.x版本中YARN提供三种资源调度器,分别为...
YARN的队列管理机制包括用户权限管理与系统资源管理两部分。CapacityScheduler的核心特点包括...
YARN的更多理解请参考官方文档:...
在分布式资源调度系统中,资源分配保证机制常见有...
YARN采用增量资源分配,避免浪费但不会出现资源饿死现象。YARN默认资源分配算法为DefaultResourceCalculator,专注于内存调度。DRF算法将最大最小公平算法应用于主资源上,解决多维资源调度问题。实例分析中,系统中有9个CPU和GB RAM,两个用户分别运行两种任务,所需资源分别为...
资源抢占模型允许每个队列设定最小与最大资源量,以确保资源紧缺与极端情况下的需求。资源调度器在负载轻队列空闲时会暂时分配资源给负载重队列,仅在队列突然收到新提交应用程序时,调度器将资源归还给该队列,避免长时间等待。
YARN最初采用平级队列资源管理,新版本改用层级队列管理,优点包括...
CapacityScheduler配置文件capacity-scheduler.xml包含资源最低保证、使用上限与用户资源限制等参数。管理员修改配置文件后需运行"yarn rmadmin -refreshQueues"。
ResourceScheduler作为ResourceManager中的关键组件,负责资源管理和调度,采用可插拔策略设计。初始化、接收应用和资源调度等关键功能实现,RM收到NodeManager心跳信息后,向CapacityScheduler发送事件,调度器执行一系列操作。
CapacityScheduler源码解读涉及树型结构与深度优先遍历算法,以保证队列优先级。其核心方法包括...
在资源分配逻辑中,用户提交应用后,AM申请资源,资源表示为Container,包含优先级、资源量、容器数目等信息。YARN采用三级资源分配策略,按队列、应用与容器顺序分配空闲资源。
对比FairScheduler,二者均以队列为单位划分资源,支持资源最低保证、上限与用户限制。最大最小公平算法用于资源分配,确保资源公平性。
最大最小公平算法分配示意图展示了资源分配过程与公平性保证。
yarn源码分析(四)AppMaster启动
在容器分配完成之后,启动容器的代码主要在ContainerImpl.java中进行。通过状态机转换,container从NEW状态向其他状态转移时,会调用RequestResourceTransition对象。RequestResourceTransition负责将所需的资源进行本地化,或者避免资源本地化。若需本地化,还需过渡到LOCALIZING状态。为简化理解,此处仅关注是否进行资源本地化的情况。
为了将LAUNCH_CONTAINER事件加入事件处理队列,调用了sendLaunchEvent方法。该事件由ContainersLauncher负责处理。ContainersLauncher的handle方法中,使用一个ExecutorService(线程池)容器Launcher。ContainerLaunch实现了Callable接口,其call方法生成并执行launch_container脚本。以MapReduce框架为例,该脚本在hadoop.tmp.dir/application name/container name目录下生成,其主要作用是启动MRAppMaster进程,即MapReduce的ApplicationMaster。
yarn源码分析(二)创建Application
深入剖析YARN源码中的Application创建机制,核心在于通过client向ResourceManager发起请求。这一过程中,Hadoop RPC协议作为桥梁,确保了客户端与ResourceManager间通信的高效与可靠。客户端通过调用接口ApplicationClientProtocol来执行操作。以`yarnClient.createApplication()`与`yarnClient.submitApplication(appContext)`为例,揭示了创建Application的主要流程。
关注点集中于两个关键步骤:初始化Application及提交Application至ResourceManager。初始化通过`createApplication()`完成,此过程在`YarnClientImpl`类中实现。此方法内部调用`getNewApplication()`以获取ApplicationID,作为后续操作的基础。
获取ApplicationID是创建过程的基石,而其实现细节则深藏于`RMClientService`中。在理解这一部分时,我们需关注`RMClientService`对于长期对象的服务化处理,以及在`YarnClientImpl`中对`submitApplication`调用的具体实现。
当ApplicationID获得后,便正式步入提交阶段。通过`submitApplication()`,客户端与ResourceManager间建立联系,资源分配与应用状态监控得以实现。此过程中的关键在于`rmClient.submitApplication`方法的调用,之后通过轮询`ApplicationReport`来监控提交状态,确保应用成功部署。
深入探究`submitApplication`方法的内部逻辑,我们会发现它在`RMClientService`中调用`rmAppManager.submitApplication`,接着通过事件调度器对新建的Application进行处理。这一处理阶段主要负责保存应用信息,同时引入了YARN中的状态机与事件模型概念,将在后续文章中进行详尽解析。