如果把大数据Hadoop集群当作一台计算机, 那么
HDFS = 磁盘
YARN = 任务调度器+资源管理器
所有任务都是运行在Yarn上
Yarn分为两个大的模块: ResourceManager NodeManager
![](https://img.haomeiwen.com/i1657578/6b2d32f8270dd7c4.png)
ResourceManager
运行在master机器上, 用于分配资源
两个模块
Scheduler 负责资源分配
ApplicationsManager 负责应用管理.
RM不负责启动container, 而是告诉AM哪些container可用, 由AM向NM发起请求来启动container.
RM负责启动AM, 并且在应用程序失败时, 重启AM.
NodeManager
运行在slave机器上, 用于执行任务
container是计算资源, 代表任务执行时所分配的cpu,内存等资源.
每个任务都是在container里执行的.
执行过程
client首先向RM提交应用, 请求一个AM实例.
RM找到一个可以启动container的NM, 并启动一个AM实例
AM向RM注册之后, client就可以从RM查找到AM的详细信息, 可以和AM建立联系.
AM向RM的Scheduler发送resource-request请求, Scheduler返回资源描述, 包括资源名称(NM的地址,rack等)、优先级、资源需求和container集合
AM向对应的NM发起container-launch-specification来启动container
应用程序在container中运行, 并把进度、状态等信息通过application-specific协议发送给AM
应用程序执行完毕, AM向RM注销, 并回收对应的container
Scheduler
scheduler是个可插拔的组件, Yarn常用3种scheduler
![](https://img.haomeiwen.com/i1657578/8138c957f97b2cb7.png)
FIFO Scheduler
完全先进先出, 按照提交的先后顺序. 大任务会堵塞小任务. 不适合共享集群
Capacity Scheduler
为每个团队分配单独的队列, 每个队列分配对应的资源. 每个队列内部使用FIFO方式.
如果资源不够, 可以使用其他队列释放出来的资源, 但是需要设置队列能够占用的最大资源, 防止队列资源占用过高.
Fair Scheduler
根据权重来分配各队列可以使用的资源.
如果一个队列没有任务, 那么这个队列的资源可以被其他队列使用.
否则按照设置好的权重来分配队列的可用资源.
没有设置权重的队列则使用平均分配的方式分配资源
抢占preemption
为了执行任务, 把超出自己份额的应用的container杀掉, 用来执行新提交的任务.
![](https://img.haomeiwen.com/i1657578/1560023baa92c639.png)
![](https://img.haomeiwen.com/i1657578/08019a003a42a72d.png)
Node Status: Node Manager和Resource Manager之间保持心跳, 并发送资源使用情况给RM.
网友评论