如果把大数据Hadoop集群当作一台计算机, 那么
HDFS = 磁盘
YARN = 任务调度器+资源管理器
所有任务都是运行在Yarn上
Yarn分为两个大的模块: ResourceManager NodeManager
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
FIFO Scheduler
完全先进先出, 按照提交的先后顺序. 大任务会堵塞小任务. 不适合共享集群
Capacity Scheduler
为每个团队分配单独的队列, 每个队列分配对应的资源. 每个队列内部使用FIFO方式.
如果资源不够, 可以使用其他队列释放出来的资源, 但是需要设置队列能够占用的最大资源, 防止队列资源占用过高.
Fair Scheduler
根据权重来分配各队列可以使用的资源.
如果一个队列没有任务, 那么这个队列的资源可以被其他队列使用.
否则按照设置好的权重来分配队列的可用资源.
没有设置权重的队列则使用平均分配的方式分配资源
抢占preemption
为了执行任务, 把超出自己份额的应用的container杀掉, 用来执行新提交的任务.
Node Status: Node Manager和Resource Manager之间保持心跳, 并发送资源使用情况给RM.