十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
yarn知识体系总结
创新互联专注于中大型企业的网站设计制作、成都网站建设和网站改版、网站营销服务,追求商业策划与数据分析、创意艺术与技术开发的融合,累计客户近1000家,服务满意度达97%。帮助广大客户顺利对接上互联网浪潮,准确优选出符合自己需要的互联网运用,我们将一直专注品牌网站建设和互联网程序开发,在前进的路上,与客户一起成长!
Yarn 产生的原因
(1)MapreduceV1 中,jobtracker 存在瓶颈:
集群上运行的所有mr 程序都有jobtracker 来调度
SPOF 单点故障
职责划分不清晰
(2) 将jobtracker 的职责划分成两个部分:
资源调度与管理:由统一的资源调度平台(集群)来实现(yarn)
任务监控与管理:
A、每一个application 运行时拥有一个自己的任务监控管理进程AppMaster
B、AppMaster 的生命周期:application 提交给yarn 集群之后,yarn 负责启动该application 的AppMaster,随后任务的执行监控调度等工作都交由AppMaster,待这个application 运行完毕后,AppMaster 向yarn 注销自己。
C、AppMaster 的具体实现由application 所使用的分布式运算框架自己负责,比如Mapreduce 类型的application 有MrAppMaster 实现类。Spark DAG 应用则有SparkOnYarn 的SparkContext 实现
yarn的架构图
yarn的2个主要的类节点(服务进程)
1、resourcemanager 主节点master --- 只需要1个 (也可以实现HA)
2、nodemanager 从节点 -----根据集群规模可以有多个
具体小结如下:
(1)ResourceManager ----> master node,可配多个RM 实现HA 机制,
ResourceManager由两个核心组件构成:
Scheduler 和ApplicationsManager;
Scheduler:负责资源调度,调度策略可插拔(内置实现CapacityScheduler / FairScheduler )不提供对application 运行的监控;
ApplicationsManager:负责响应任务提交请求,协商applicationMaster 运行的container,重启失败的applicationMaster
(2)NodeManager ----> slave nodes,每台机器上一个
职责:加载containers,监控各container 的资源使用情况,并向Resourcemanager/Scheduler 汇报
(3)ApplicationMaster ----> 特定运算框架自己实现,接口为统一的AppMaster
职责:向Scheduler 请求适当的资源,跟踪任务的执行,监控任务执行进度、状态等
yarn的基本概念-mr程序提交的流程
yarn:hadoop的资源管理调度平台(集群)---为用户程序提供运算资源的管理和调度
用户程序:如用户开发的mr程序
1、runjar启动起来之后,就会找resourcemanager,发出一个远程过程调用RPC //申请提交一个job(mr程序)
2、resourcemanager会返回一个jobid以及一个提交job相关文件的hdfs路径给runjar程序 比如:hdfs://../stagingDIR
3、runjar就会上传job相关的文件到hdfs路径下 比如:hdfs://.../stagingDIR/jobid/worcount.jar
jbo.xml
job split的切片信息
4、通知RM,文件上传成功
5、在RM内部会对本次客户端提交的任务,构造出一个任务出来,放在他的内部的任务队列中。别的客户端提交上来的任务也会在这个队列中,当资源不够的时候,会等待。
6、nodemanager和resourcemanager之间时刻都保持着一个心跳的通信,任务出来之后,nodemanager会去自动去领取任务,比如:nodemanager在领取任务的时候被其中一个节点领取到了任务,nodemanager会到hdfs上拉取job的相关的文件。
7、nodemanager在自己的内部隔离出一部分资源出来,形成一个容器(container)cpu+mem 这个任务要做的第一件事情是:他会在容器里面去启动一个程序,(那他怎么知道去启动这个程序的呢?resource manager会在这个job任务中描述的会嵌入一个启动程序的shell命令)nodemanager负责把这个shell命令在他的机器上执行一下就ok了,执行以下就会在容器中启动一个MapReduce jar包中的一个程序,这个程序就叫做(MRappmaster进程)接下来所有的处理流程就由这个MRappmaster进程来主导了。
MRAPPmaster会做什么事?他本身又是个什么东西呢?
MRappmaster:其实就是一个MapReduce的应用程序的主管。这个主管进程是MapReduce框架来实现的,这个就是用来管理这个MapReduce程序的执行
在yarn中其实就只负责到把mrappmaster进程启动起来。其他的MapReduce程序具体是怎么运行的,yarn就不管了。yarn只负责给你相应需要的资源就Ok了
8、mrappmaster启动起来之后,会向resourcemanager注册并申请程序运行的资源。mrappmaster会启动map task和reduce task进程,所以需要资源包括监控和管理任务所需要的资源。
9、resourcemanager就会把mrappmaster申请的响应的资源分配给他,那么在任务队列中就又会产生新的任务,这些任务是交给nodemanager去处理的(其实就是分配资源的任务)nodemanager领取到新的分配资源的任务的时候就会在自己的这台机器上创建新的容器(一台机器上可以创建多个容器)每台nodemanager创建好的容器资源列表会返回给RM
10、RM就会返回资源列表信息给MRappmaster
11、mrappmaster就会去找到每台nodemanager中领到任务并创建容器的机器,让他们去启动map task进程。(要启动几个map task进程是看job任务中关于job split切片规则的,规则中是几个就起几个map task进程)
12、当map task处理完成任务后会返回信息给mrappmaster 告诉他我把处理好的 任务结果放在了哪里哪里....
13、mrappmaster会再次向RM申请新的资源,RM会为这次的申请再次分配一个任务到任务队列中,那么其中的一个nodemanager会去领取任务,并且分配容器,然后会返回给RM,告诉他我创建好了容器,然后RM会告诉给MRappamster告诉他,你需要的资源,我给你创建好了,并且告诉他在那台nodemanager上。
14、mrappmaster会在响应的nodemanager容器中启动一个reduce task 进程,并且告诉他map 输出的结果在哪里 哪里...
reduce task就会去拿,在执行他的内部的执行过程
16、reduce task就会给mrappmaster返回处理结果,
17、整个MR程序处理完成,mrappmaster向RM注销自己。
小结:
YARN的工作机制--MR程序运行流程
查看map task和reduce task的进程用命令jps看到的是yarn child
总结:
1.yarn只响应job的提交及为job的运行分配资源
yarn不参与job的具体运行机制和流程
2.mapreduce程序中有一个MrAppmaster来负责程序的 具体运行流程控制
3.由于yarn不提供用户程序的具体运行,所以yarn可以为各种类型的资源程序提供资源服务
(YARN就类似于一个操作系统平台,可以运行各种各样运算框架所开发的程序:mapreduce storm spark...)
4.因为yarn的这种运行机制,延长了hadoop的生命周期
5.因为yarn可以整合各种各样的运算框架,企业就可以把各种分布式框架整合到hadoop集群
以便于企业管理和节约了企业的成本
application 生命周期
Yarn 支持短周期和长周期应用
MR:短周期应用,用户的每一个job 为一个application
Spark:短周期应用,但比上一种效率要高,它是将一个工作流(DAG)转化为一个application,这样在job 之间可以重用container 及中间结果数据可以不用落地
Storm:long-running 应用,应用为多用户共享,降低了资源调度的前期消耗,从而可以为用户提供低时延响应
资源请求
资源请求由Container 对象描述,支持数据本地性约束,如处理hdfs 上的数据,则container 优先分配在block 所在的datanode,如该datanode 资源不满足要求,则优选同机架,还不能满足则随机分配
Application 可以在其生命周期的任何阶段请求资源,可以在一开始就请求所需的所有资源,也可以在运行过程中动态请求资源;如spark,采用第一种策略;而MR 则分两个阶段,map task 的资源是在一开始一次性请求,而reduce task 的资源则是在运行过程中动态请求;并且,任务失败后,还可以重新请求资源进行重试
yarn任务调度--capacity scheduler(容量调度) / fair scheduler(公平调度) //此部分见单独文档
由于集群资源有限,当无法满足众多application 的资源请求时,yarn 需要适当的策略对application 的资源请求进行调度;