1.Spark源码解析2-YarnCluster模式启动
2.YARNå·¥ä½åç YARNè°åº¦å¨
3.开启 Kerberos 安全的大数据环境中,Yarn Container 启动失败导致作业失败
4.yarn详解
5.å¦ä½ç解 yarn ç container
6.yarn源码分析(四)AppMaster启动
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å·¥ä½åç YARNè°åº¦å¨
æ§çMapReduceæ¶æã
å¨Hadoop2.0ä¸, YARNè´è´£ç®¡çMapReduceä¸çèµæº(å å, CPUç)并ä¸å°å ¶æå æContainer. è¿æ ·å¯ä»¥ç²¾ç®MapReduce, 使ä¹ä¸æ³¨äºå ¶æ é¿çæ°æ®å¤çä»»å¡, å°æ éèèèµæºè°åº¦. YARNä¼ç®¡çé群ä¸æææºå¨çå¯ç¨è®¡ç®èµæº. åºäºè¿äºèµæºYARNä¼è°åº¦åºç¨(æ¯å¦MapReduce)åæ¥çèµæºè¯·æ±, ç¶åYARNä¼éè¿åé Containeræ¥ç»æ¯ä¸ªåºç¨æä¾å¤çè½å
å¨Hadoopé群ä¸ï¼å¹³è¡¡å åï¼RAMï¼ãå¤çå¨ï¼CPUæ ¸å¿ï¼åç£çç使ç¨æ¯è³å ³éè¦çï¼åçè§å以å æä¸é¡¹å¼èµ·ç¶é¢å¶çº¦ãä¸è¬ç建议æ¯ï¼ä¸åç£çåä¸ä¸ªCPUæ ¸å¿ä¸é 置两个Containerä¼è¾¾å°é群å©ç¨ççæ佳平衡,Containeræ¯YARNä¸å¤çè½åçåºæ¬åå , æ¯å¯¹å å, CPUççå°è£
ä»å¯ç¨ç硬件èµæºè§åº¦çï¼è¦è°æ´ç¾¤éæ¯ä¸ªèç¹YarnåMapReduceçå åé ç½®å°åéçæ°æ®ï¼åºæ³¨æ以ä¸å 个éè¦çå ç´ ï¼
ä¿çå å=ä¿çç³»ç»å å+ä¿çHBaseå åï¼å¦æHBaseæ¯å¨åä¸ä¸ªèç¹ï¼
ä¸é¢ç计ç®æ¯ç¡®å®æ¯ä¸ªèç¹çContainerå 许çæ大æ°éã
Containeræ°é=min (2 CORES, 1.8 DISKS, (å¯ç¨å å)/æä½Containerç大å°)
æä½Containerçå¤§å° è¿ä¸ªå¼æ¯ä¾èµäºå¯ç¨çRAMæ°éââå¨è¾å°çåå¨èç¹ï¼æå°çContainerç大å°ä¹åºè¾å°ãä¸é¢ç表ååºäºæ¨èå¼ï¼
æå计ç®çæ¯ä¸ªContainerçå å大å°æ¯
æ¯ä¸ªContainerçå åå¤§å° = max(æå°Containerå å大å°, (æ»å¯ç¨å å) /Containeræ°))
YARN çæ ¸å¿å°±æ¯å°jobTrackerçåè½è¿è¡æ解ï¼åæäºèµæºç®¡çåä»»å¡è°åº¦çæ§ä¸¤ä¸ªè¿ç¨ï¼ä¸ä¸ªå ¨å±çèµæºç®¡çåæ¯ä¸ªä½ä¸ç管çãResourceManageråNodemanageræä¾äºè®¡ç®èµæºçåé å管çï¼ApplicationMasterè´è´£å®æç¨åºçè¿è¡.YARNæ¶æä¸å½¢æäºä¸ä¸ªéç¨çèµæºç®¡çå¹³å°åä¸ä¸ªéç¨çåºç¨è®¡ç®å¹³ï¼é¿å äºæ§æ¶æçåç¹é®é¢åèµæºå©ç¨çé®é¢ï¼åæ¶ä¹è®©å¨å ¶ä¸è¿è¡çåºç¨ä¸åå±éäºMapReduceå½¢å¼
çæ³æ åµä¸ï¼æ们åºç¨å¯¹ Yarn èµæºç请æ±åºè¯¥ç«å»å¾å°æ»¡è¶³ï¼ä½ç°å®æ åµèµæºå¾å¾æ¯
æéçï¼ç¹å«æ¯å¨ä¸ä¸ªå¾ç¹å¿çé群ï¼ä¸ä¸ªåºç¨èµæºç请æ±ç»å¸¸éè¦çå¾ ä¸æ®µæ¶é´æè½çå°
ç¸åºçèµæºãå¨Yarnä¸ï¼è´è´£ç»åºç¨åé èµæºçå°±æ¯Schedulerãå ¶å®è°åº¦æ¬èº«å°±æ¯ä¸ä¸ª
é¾é¢ï¼å¾é¾æ¾å°ä¸ä¸ªå®ç¾ççç¥å¯ä»¥è§£å³ææçåºç¨åºæ¯ã为æ¤Yarnæä¾äºå¤ç§è°åº¦å¨
åå¯é ç½®ççç¥ä¾æ们éæ©ãå¨ Yarn ä¸æä¸ç§è°åº¦å¨å¯ä»¥éæ©ï¼FIFO Scheduler ï¼Capacity Schedulerï¼Fair Schedulerã
开启 Kerberos 安全的大数据环境中,Yarn Container 启动失败导致作业失败
在开启Kerberos安全的aft源码下载大数据环境时,经常会遇到Yarn Container启动失败导致的spark/hive作业失败问题。以下是分析和解决这些问题的关键步骤。
问题1:在大数据集群中开启kerberos安全认证后,提交hive on mr/hive on spark任务到YARN执行失败。查看YARN web UI,发现报错信息指向了YARN Container启动失败。
问题2:同样地,在集群中开启kerberos安全认证并提交spark on hive任务到YARN后,执行同样失败,YARN web UI中显示了相关的错误信息。
分析过程:在分析问题时,我们注意到在使用命令查询作业详细日志时,无法找到任何相关日志(确认了YARN已开启日志聚合),并且在HDFS文件系统中发现已创建了作业日志对应的目录,但该目录下没有文件。此外,我们注意到集群中启用了Hive代理:hive.server2.enable.doAs=true。结合YARN web UI中的每日鸡汤源码关键报错信息,可以确认是因为集群中YARN nodeManager节点上没有相关业务用户,导致YARN Container启动失败,进而导致作业无法执行。
原因:YARN Container启动失败的主要原因是YARN nodeManager节点上缺少相关的业务用户,这可能是由于用户管理配置不当、权限问题或者用户信息未正确同步等原因导致。
解决方案:解决此问题的关键在于确保YARN nodeManager节点上包含所有需要的业务用户。这通常涉及到调整用户管理配置、确保用户信息正确同步至YARN环境,以及可能的权限管理调整。具体步骤可能包括检查HDFS和YARN的用户配置文件、验证用户信息同步机制(如Kerberos或LDAP的集成)、确保用户在YARN节点上正确创建或存在等。
技术背景:本文由mdnice多平台发布,旨在分享大数据环境中的Kerberos安全配置与YARN作业执行问题的排查与解决策略,提供给开发者和系统管理员作为参考。
yarn详解
yarnçç»æå¯ä»¥ä»ä¸¤ä¸ªè§åº¦çå¾ ï¼å ¶ä¸ï¼å¨master nodeä¸è¿è¡ResourceManagerã
æ¯ä¸ªdatanodeä¸è¿è¡ä¸ä¸ªNodeManagerã
并æ该dataNodeä¸çææ计ç®èµæºï¼CPUãå åï¼è§ä¸ºä¸ä¸ª/å¤ä¸ªContainerï¼èContainerå¯ä»¥è¢«åé æ§è¡ä¸ä¸ªtask(ApplicationMasterãmap taskãreduce taskç)ã
å ·ä½å¯çä¸å¾ï¼
å¯ç»åä¸æçå¾çç解
Containeræ¯Yarnæ¡æ¶ç计ç®åå ï¼æ¯å ·ä½æ§è¡åºç¨taskï¼å¦map taskãreduce taskï¼çåºæ¬åä½ã
Containeråé群èç¹çå ³ç³»æ¯ï¼ä¸ä¸ªèç¹ä¼è¿è¡å¤ä¸ªContainerï¼ä½ä¸ä¸ªContainerä¸ä¼è·¨èç¹ã
ä¸ä¸ªContainerå°±æ¯ä¸ç»åé çç³»ç»èµæºï¼ç°é¶æ®µåªå å«ä¸¤ç§ç³»ç»èµæºï¼ä¹åå¯è½ä¼å¢å ç£çãç½ç»çèµæºï¼ï¼
æ¢ç¶ä¸ä¸ªContaineræçæ¯å ·ä½èç¹ä¸ç计ç®èµæºï¼è¿å°±æå³çContainerä¸å¿ å®å«æ计ç®èµæºçä½ç½®ä¿¡æ¯ï¼è®¡ç®èµæºä½äºåªä¸ªæºæ¶çåªå°æºå¨ä¸ãæ以æ们å¨è¯·æ±æ个Containeræ¶ï¼å ¶å®æ¯åæå°æºå¨åèµ·ç请æ±ï¼è¯·æ±çæ¯è¿å°æºå¨ä¸çCPUåå åèµæºã
ä»»ä½ä¸ä¸ªjobæapplicationå¿ é¡»è¿è¡å¨ä¸ä¸ªæå¤ä¸ªContainerä¸ãå¨Yarnæ¡æ¶ä¸ï¼ResourceManageråªè´è´£åè¯ApplicationMasteråªäºContainerså¯ä»¥ç¨ï¼ApplicationMasterè¿éè¦å»æ¾NodeManager请æ±åé å ·ä½çContainerã
NodeManagerè¿ç¨è¿è¡å¨é群ä¸çèç¹ä¸ï¼æ¯ä¸ªèç¹é½ä¼æèªå·±çNodeManagerãNodeManageræ¯ä¸ä¸ªslaveæå¡ï¼
éè¿åResourceManageré åï¼NodeManagerè´è´£æ´ä¸ªHadoopé群ä¸çèµæºåé å·¥ä½ã
NodeManageråªè´è´£ç®¡çèªèº«çContainerï¼å®å¹¶ä¸ç¥éè¿è¡å¨å®ä¸é¢åºç¨çä¿¡æ¯ãè´è´£ç®¡çåºç¨ä¿¡æ¯çç»ä»¶æ¯ApplicationMasterï¼å¨åé¢ä¼è®²å°ã
ResourceManager主è¦æ两个ç»ä»¶ï¼ScheduleråApplicationManagerã
å¦ä¸ä¸ªç»ä»¶ApplicationManagerçåè½å¦ä¸ï¼
ApplicationMasterè¿è¡å¨Containerä¸ã
ApplicationMasterç主è¦ä½ç¨æ¯åResourceManagerç³è¯·èµæºå¹¶åNodeManagerååå·¥ä½æ¥è¿è¡åºç¨çå个任å¡ç¶åè·è¸ªå®ä»¬ç¶æåçæ§å个任å¡çæ§è¡ï¼éå°å¤±è´¥çä»»å¡è¿è´è´£éå¯å®ã
1.clientåyarnæ交jobï¼é¦å æ¾ResourceManageråé èµæºï¼
2.ResourceManagerå¼å¯ä¸ä¸ªContainer,å¨Containerä¸è¿è¡ä¸ä¸ªApplication manager
3.Application manageræ¾ä¸å°nodemanagerå¯å¨Application masterï¼è®¡ç®ä»»å¡æéç计ç®
4.Application masteråApplication managerï¼Yarnï¼ç³è¯·è¿è¡ä»»å¡æéçèµæº
5.Resource schedulerå°èµæºå°è£ åç»Application master
6.Application masterå°è·åå°çèµæºåé ç»å个nodemanager
7.å个nodemanagerå¾å°ä»»å¡åèµæºå¼å§æ§è¡map task
8.map taskæ§è¡ç»æåï¼å¼å§æ§è¡reduce task
9.map taskå reduce taskå°æ§è¡ç»æåé¦ç»Application master
.Application masterå°ä»»å¡æ§è¡çç»æåé¦pplication managerã
å个ç»ä»¶çåè½
ä¸ä¸ªJobçæ交è¿ç¨
blogs.com/yangsy/p/.html
åè½ä¸è¿è¡è¿ç¨
blogs.com/xwdreamer/archive////.html
å¦ä½ç解 yarn ç container
ããcontainerå°±æ¯âä¸ç»èµæºâï¼ç°å¨æ¯âå å+CPUâï¼æªæ¥è¿æå¯è½æç½ç»å¸¦å®½ä¹ç±»çä¹å å«è¿å»ã
ããå½æä¸ä¸ªApplicationï¼å¨MRV1éå«Jobï¼ï¼ç¬¬ä¸ä¸ªcontainerå°±ç¨æ¥è·ApplicationMasterï¼ç¶åApplicationMasteråç³è¯·ä¸äºcontaineræ¥è·Mapperï¼ä¹ååç³è¯·ä¸äºcontaineræ¥è·Reducerã
ããcontaineræ¢å¯ä»¥è·Mapperä¹å¯ä»¥è·Reducerï¼å°±ä¸åMRV1éçmap slotåªè½è·mapãreduce slotåªè½è·reduceã
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。
深入理解 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,二者均以队列为单位划分资源,支持资源最低保证、上限与用户限制。最大最小公平算法用于资源分配,确保资源公平性。
最大最小公平算法分配示意图展示了资源分配过程与公平性保证。