技术背景
Hadoop最初的设计为仅运行MapReduce作业。随着替代性的编程模型的到来,除 MapReduce 外,越来越需要为可通过高效的、公平的方式在同一个集群上运行并共享资源的其他编程模型提供支持.而在hadoop1.x架构中,yarn并未在mapred中拆分开来.在1.x中,mapreduce存在一定的单点风险,JobTracker干的事情太多了。资源利用率非常的低,运维成本很高
Hadoop1.0有局限性,概括为以下几个方面 :
扩展性差
可靠性差
资源利用率低,运维成本高
无法支持多种计算框架
设计目的
将资源管理和任务调度与计算模型分离开来;解决1.x的短板问题
设计思想
组件
技术本质
分布式资源管理和任务调度框架
分布式计算的容器,可以运行程序的容器container
核心特性
- 资源管理:
将整个集群中所有机器的cpu和内存做统一化管理;
每一台机器运行程序时,能够使用多少资源,都由yarn负责分配 - 任务调度: 当有多个任务同时提交时,yarn负责调度任务运行和资源分配的优先级
集群角色
resourcemanager
- 概念:yarn集群的主节点,
- 特点:具有spof危险,需要实现主备机制,实现原理与hdfs类似(不需要zkfc,只需要开启配置支持就可以)
- 职责:
1.负责处理客户端的请求(接客)
2.负责启动和监控applicationMaster(监控)
3.监控NodeManager(监控)
4.负责系统的资源分配和调度(管理)
applicationManager
- 概念:运行在resourcemanager节点上的一个进程
- 职责:
1.客户端的请求处理的实际执行者(接受请求)
2.负责将接收到的任务提交给applicationMaster执行(分配任务) - 补充:一个mr作业启动一个applicationMaster执行
resouceScheduler
- 概念:运行在resourcemanager节点上的一个进程
- 职责:
- 负责处理applicationMaster的申请资源请求
- 负责分配Container给applicationMaster
nodemanager
- 概念:yarn集群中的从节点
- 职责:
1.定期向ResourceManager汇报本节点的资源使用情况和各个Container的运行状态(汇报)
2.接受并处理ResourceManager的Container命令(执行)
3.单个节点的计算资源和任务管理(applicationMaster)
applicationMaster
- 概念:运行在nodeManager节点上的一个进程
- 职责:
1.数据切分,每个mr作业任务的实际管理者
2.向resourceScheduler申请资源和指令,resourceScheduler将资源和指令封装为container并返回
3.分配内部任务,与NodeManager通讯和共享Container,启动和停止Task,task是运行在Container中的
4.task的监控和容错
5.任务完成后注销并回收资源
container
- 概念:一个对象
- 职责:对任务情况描述。cpu,memory,环境变量等
处理job流程
- 客户端请求resourceManager,提交job作业给applicationManager
- applicationManager选择一个nodemanager分配作业并在此节点上启动一个applicationMaster
- applicationMaster向resourceScheduler申请计算资源
- resourceScheduler将命令和资源信息封装在Container中返回给applicationMaster
- applicationMaster共享Container中的信息,去对应的nodemanager上启动maptask
- maptask完成会将结果信息返回给applicationMaster,每个task完成之后,applicationMaster会释放该task曾经占用的资源
- applicationMaster根据返回结果信息,通知对应的nodemanager节点上reducetask任务过来拉取数据,
- reducetask任务完成后返回结果给applicationMaster,
- applicationMaster释放资源,注销container
- 补充:
某个节点上maptask失败了,会如何处理?:hdfs参数优化,默认每个task重试4次,默认task/job失败比0
看资源状态,和机器状态,综合评定,不是固定的
任务调度机制
FIFO
- 介绍:hadoop1.x中默认实现的调度机制
- 特点: 单队列,先进先出
- 解释:
1.单队列: 无法承载任务的【并行】,一个任务即可占用集群全部计算资源
2.先进先出: 无法承载任务的【并发】,一个任务先提交,就会占用当前所有资源.只有当这个任务结束时,另一个任务才会开始处理
Capacity
介绍:apache 版本默认实现
特点: 多队列,先进先出
解释:
1.多队列:可以承载【并行】,
2.先进先出:每个队列中还是FIFO,每个队列分配了固定资源,当程序运行时,被提交到哪个队列,就享有这个队列的所有资源实现优化:
1.如果当前队列的资源不足,另外一个队列的资源空闲,那么可以借用
Fair
介绍:cdh版本默认实现
特点: 多队列,共享资源
解释:
1.多队列: 可以承载【并行】
2.共享资源: 每个队列内部也支持并行,可以承载【并发】
3.支持资源抢占
4.动态调整资源,多线程实现优化:
1.可以分配队列的优先级
多租户资源隔离
概念:可以根据不同的业务线,不同的用户划分不同的资源池,保证各个应用都可以顺利使用资源
解释:即通过配置文件可以指定配置多个资源队列,这些资源队列可以配置占比,权重,优先级等信息
一般没有配置,即使用/root/default队列
相关端口
appmanager 端口 8032
http服务端口 8088