首先我们先了解一下hadoop1.0版本和hadoop2.0版本的区别。
在hadoop1.0中只有两个模块 hdfs 和 mapReduce
hdfs负责存储
mapReduce 负责计算
在hadoop1.0中 所有计算相关的 全部放到了mapReduce上
mapReduce在运行的时候有两个进程 jobtracker 和 tasktracker
jobtracker:是整个计算程序的主节点(老大)
负责进行资源调度(没有资源调度策略,随机调度)
还负责监控程序运行的状态,对运行失败的应用程序进行重启
存在单点故障问题,不支持高可用,如果jobtracker宕机了,整个程序就运行不了了
tasktracker:负责计算程序的执行
只能运行在mapslot中,reduce任务只能运行在reduceslot中,当一个应用程序只需要运行map任务
不需要运行reduce任务的时候,就会造成资源浪费。
而且这一部分资源没有划分CPU、IO或者网络
所以hadoop1.0中存在着致命的缺陷
1)单点故障问题
2)所有的资源调度是随机的,会造成资源浪费
3)jobtracker的运行压力过大
hadoop2.0进行了改进,将maperduce分成了两部分mapreduce和yarn
yarn专门负责程序的资源调度
yarn的概念:
yarn再启动的时候会有两个进程
resourcemanager:整个资源调度的老大
1)负责接收客户端的请求 这个请求时程序运行的请求
2)接受nodemanager的状态报告,这个状态报告包括nodenamager的资源状态和存活状态
3)负责整个计算程序的资源调度 调度的运行资源的多少 和 在哪个节点上运行
nodemanager:负责真正的提供资源 运行计算程序
1)接收resourcemanager的命令
2)提供资源运行计算程序
yarn启动计算及资源调度概念:
MRAppMaster:单个计算程序的老大 负责帮助当前计算程序向resourcemanager申请资源,
负责启动maptask任务和reducetask任务 负责监控maptask和reducetask的运行进度
类似于项目经理
ASM:applicationsmanager 所有应用程序的管理者 负责调度应用程序
container:抽象资源容器 封装着一定的cpu io 和网络等资源
是运行maptask reducetask等的运行资源单位
1个split对应一个1个maptask 1个maptask分配1个container 1个container在进程中显示的就是1个yarnchild
scheduler:调度器 调度的是什么时候执行哪个计算程序
调度器:
1)FIFO:first in first out 先进先出
先提交的程序先执行 后提交的程序后执行
内部维护一个队列
2)FAIR:公平调度器:
大家平分资源运行
假设刚开始只有一个任务 占资源100%
这时候又来了一个任务 每人占50%
内部维护一个队列
3)CAPICITY:计算能力调度器:
可以按需进行配置使用资源:
内部可以维护多个队列,多个队列之间可以进行资源分配
在每个队列中都是执行先进先出的