yarn 是hadoop 的资源管理 软件。
yarn 作为通用资源管理 ,它并不关心你拿资源做什么,而是你要资源他就给你资源 ,你用完之后还给它即可。因为 yarn 不仅仅是作为 mr的资源管理,它还可以为其他的应用程序作为资源管理 如:spark /storm 等 都可以。
YARN 是一个资源管理、任务调度的框架,主要包含三大模块: ResourceManager :负责所有资源的监控、分配和管理; ApplicationMaster: 负责每一个具体应用程序的调度和协调; NodeManager :负责每一个节点的维护。
NodeManager 以心跳的方式向 ResourceManager 汇报资源使用情况(目前主要是 CPU 和内存的使用情况)。RM 只接受 NM 的资源回报信息,对于具体的资源处理则交给 NM 自己处理。
可以把 yarn 理解为相当于一个分布式的操作系统平台,而 mapreduce 等运算程序则相 当于运行于操作系统之上的应用程序,Yarn 为这些程序提供运算所需的资源(内存、cpu)
1.yarn 并不清楚用户提交的程序的运行机制 2.yarn 只提供运算资源的调度(用户程序向 yarn 申请资源,yarn 就负责分配资源) 3. yarn 中的主管角色叫 ResourceManager 4. yarn 中具体提供运算资源的角色叫 NodeManager 5. yarn与运行的用户程序完全解耦,意味着yarn上可以运行各种类型的分布式运算程序, 比如 mapreduce、storm,spark,tez …… 6. spark、storm 等运算框架都可以整合在 yarn 上运行,只要他们各自的框架中有符合 yarn 规范的资源请求机制即可 7. yarn 成为一个通用的资源调度平台.企业中以前存在的各种运算集群都可以整合在一 个物理集群上,提高资源利用率,方便数据共享
比如 note1 note2 note3 note1 note2: note3 也就是说 yarn 是用来资源调度 。resourcemanager 是资源调度的主角色,nodemanager 是具体提供资源的角色。datanode 用于存储具体数据。【也就是 每台机器上都会有 nodemanager 并于主机上的resourcemanager 保持通信】
由上图 : 1 yarn client 申请资源 ,申请2核2线程 100g 内存 的资源。 2.resourcemanager 从 345678几台机器中 分配资源给 申请资源者。【所以resourcenamager 与nodemanager 需要保持时刻通信】
问题场景:比如 当集群资源繁忙的时候 ,怎么办? 1.先来后到 排序 2.如果有个比较中的运用程序 在后面 急需处理 我们还可以设置 权重。
YARN 是一个资源管理、任务调度的框架,主要包含三大模块: ResourceManager :负责所有资源的监控、分配和管理; ApplicationMaster: 负责每一个具体应用程序的调度和协调; NodeManager :负责每一个节点的维护。
NodeManager 以心跳的方式向 ResourceManager 汇报资源使用情况(目前主要是 CPU 和内存的使用情况)。RM 只接受 NM 的资源回报信息,对于具体的资源处理则交给 NM 自己处理。
NodeManager 是每个节点上的资源和任务管理器,它是管理这台机器的代理,负责该节点程序的运行,以及该节点资源的管理和监控。YARN 集群每个节点都运行一个 NodeManager。
ApplicationMaster:1.用 户 提 交 的 每 个 应 用 程 序 均 包 含 一 个 ApplicationMaster , 它 可 以 运 行 在ResourceManager 以外的机器上。2.负责与 RM 调度器协商以获取资源(用 Container 表示)3.与 NM 通信以启动/停止任务
自总:口述yarn 的运行流程:首先yarn有三大组件(模块) resourcemanager nodemanager 和applicationMaster 组成。当一个应用程序 交个yarn ,首先会由resourcemanager 进行一个资源(内存和cpu)的分配 ,同时resourcemanager会启动一个container(容器) 用于applicationMaster,启动的同时applicationMaster会向resourcemanager 注册自己,启动成功后与resourcemanager保持心跳。然后applicationMaster向resourcemanager 发送请求,申请相应数目的container(容器),申请成功的container会由 applicationMaster进行初始化。初始化成功后,applicationMaster会与nodemanager进行通信,并要求nodemanager 启动container,并且applicationMaster 会与nodemanager保持心跳,从而对nodemanager上运行的任务进行管理和监控。【也就是 container在运行期间通过rpc协议向对应applicationMaster汇报应用的状态 进度 和更新等信息】 最后 当应用程序结束后,applicationMaster向resourcemanager 注销自己,并允许container被收回。
二 yarn 的 调度器 Scheduler yarn 中有三种调度器 可以选择 :FIFO Scheduler /Capacity Scheduler /Fair Scheduler 1. FIFO Scheduler :是把应用按提交的顺序 排成一个队列,就是先将在前面的应用分配资源。 缺点:它并不适用于共享集群。大的应用可能会占用所有集群资源,这就导致其它应用被阻塞 后俩种更适合 共享集群。因为后俩者都允许大任务和小任务在提交的同时获得一定的系统资源。
在FIFO 调度器中,小任务会被大任务阻塞。 2.Capacity Scheduler :而对于Capacity调度器,**有一个专门的队列用来运行小任务,**但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。
3.Fair Scheduler :在Fair调度器中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。如下图所示,当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。
Fair调度器中的队列有一个权重属性(这个权重就是对公平的定义)
需要注意的是,在Fair调度器中,从第二个任务提交到获得资源会有一定的延迟,因**为它需要等待第一个任务释放占用的Container。**小任务执行完成之后也会释放自己占用的资源,大任务又获得了全部的系统资源。最终的效果就是Fair调度器即得到了高的资源利用率又能保证小任务及时完成。