RM是一个全局的资源管理器,集群中只能有一个,负责整个系统的资源管理和分配,包括处理客户端请求,启动/监控AppMaster,监控NodeManager,资源的分配和调度
RM它的主要组件有两个构成:
调度器(scheduler /ˈskɛdʒʊələ/ )
调用器根据容量,队列等限制条件,将系统中资源分配给各个正在运行的应用程序.需要注意: 该调度器是一个"纯调度器",它不再从事任何与具体应用程序相关的工作
假设场景:
调度器不负责监控或跟中应用程序的执行状态,也不负责重新启动引用执行无论是失败或是硬件故障 都和它无关这些事情都交给AppMaster完成,调度器仅根据各个应用程序需要资源进行资源分配,而具体的资源分配单位会抽象出一个概念"资源容器"Container
应用程序管理器(ApplicationsManager ASM)
应用程序管理器主要负责整个系统中所有的应用程序,包括应用程序的提交,与调度器的资源协商和启动AppMaster,监控AppMaster运行的状态并在失败的时候进行重新启动
管理YARN内存运行应用程序的每个实例
功能: 数据切片 , 为应用程序申请资源并进一步分配给内部任务 ,任务监控与容错负责协调来之RM的资源,并通过NM监视容易执行和资源使用情况
NM整个集群中DN有多少个就有多少个NM,负责每个节点上的资源使用情况
功能: 单个节点上的资源你管理和任务,处理来之RM的名命令和来之AppMaster命了
NM会定时的向RM汇报当前节点上资源使用的情况和各个Container的运行状态
Container是YARN中资源抽象,它封装某个节点上的多个资源信息
例如: 内存,CPU,磁盘,网络等,当AppMaster向RM申请资源的时候,RM为AppMaster返回资源便是用
Container表示的,YARN会为每个人物分配一个Container,且该人物只能使用该Container中的资源
ps:YARN仅支持CPU和内存两种资源,切使用轻量级的资源隔离机制Cgroups
功能: 对task环境的抽象,描述了一些列信息,任务运行资源的集合,任务运行环境
ps:Cilent向RM提交每一个应用程序都必须有一个AppMaster.它经过RM分配资源后会运行在某一个slave节点上
Container中具体做使用就是执行Task任务,Container会做一个事情保证RM,NM和AppMaster自己保证一个通信,通 信机制使用的是RPC机制
1.Client向yarn提交job,先找RM分配资源
2.RM开启一个Contaniner,在Container这种运行一个ApplicationsManager(ASM)
3.ASM找一台NM启动AppMaster,计算任务所需要的计算
4.AppMaster会在向 ASM申请运行任务需要的资源
5.调度器scheduler将资源封装发给AppMaster
6.AppMaster将获取到资源分配给各个NM
7.各个NM得到任务和资源就开执行MapTask
8.MapTask执行结束之后会开始行reduceTask
9.MapTask和ReduceTask执行完成之后会将结果反馈给AppMaster
10.AppMaster将任务执行的记过最终返回给ASM
MR具体执行流程:
1.一个MR启动的时候,最先启动是MRAppMaster.MRAppMaster启动后根据本次job的描述信息,计算出现
maptask实例数量,然后向集群申请机器启动相应数量的maptask进程
2.MapTask进程启动之后,会根据给定的数据切片范围进行数据处理,主体流程:
2.1利用客户指定的Inputformat来获取当前数据,行程输入KV键值对
2.2将输入的KV(K是文件的行号,V是文件一行数据)对传递给客户端定义的map()方法做逻辑运算 并将Map()方法输出的KV键值对进行收集
2.3将收集的数据缓存到磁盘中,会根据K的分区排序后不断溢写到磁盘汇总(shuffle)
3.MRAppMaster监控到所有maptask进程任务完成后,会根据客户端指定参数启动相对应的ReduceTask,并告知
Reducetask进程要处理的数据范围
ps:Reduce -->可以看做是一个分区,这个分区是用来处理数据
4.Reducetask进程启动之后,会根据MRAppMaster告知的待处理数据的所在位置,从若干台maptask运行的机器上 获取结果数据,并在本地进行重新归并排序,然后相同key是一个组,然后调用客户端所定义的reduce()方法进行逻辑运 算,并将收集运算结果,最终会调用客户端中的Outputformat将结果输出到外部存储设备