一、 yarn的基本架构
ResourceManager
ResourceManager:资源调度(全局管理),接受并且处理client请求监控NodeManager并向其发送指令,启动或监控appmaster的指令
NodeManager
NodeManager:单节点的资源管理,监控Container生命周期和使用的资源,处理来自ResourceManager和AppMaster的指令
ApplicationMaster
ApplicationMaster: job管理者
主要功能:负责数据切分,为应用程序申请资源,并进一步分配给内部任务,内部任务的 监控和容错,负责协调来自ResourceManager的资源,并通过NodeManager监视任务的执行和资源使用情况
Container
Container:job的执行者
主要功能:动态资源分配,封装了内存、cpu、磁盘、网络等多维度资源
二、job提交的全过程
1)client向AppManager提交job,申请jobID
2)AppManager返回一个jobID并将路径返回给client
3)Client将运行job所需资源(jar包,configuration配置信息,inputsplit分片信息等)上传到返回的HDFS路径
4)上传成功后client向AppManager发送请求,申请运行Appmaster
5)AppManager将此job转发到调度器ResourceScheduler,ResourceScheduler将此job放到调度队列
6)某一个空闲的NodeManager领取到该job
7)该NodeManager创建Container,并产生AppMaster
8)AppMaster获取HDFS上提交的文件,根据分片信息生成MapTask和ReduceTask
9)Appmaster向ResourceManager申请运行多个MapTask任务资源
10)ResourceManager将运行MapTask任务分配给空闲的多个NodeManager
,NodeManager分别领取任务并创建容器(Container)
11)AppMaster向接收到任务的NodeManager发送程序启动脚本,每个接受到任务的NodeManager启动mapTask,
maptask对数据进行处理,并分区排序
12)AppMaster等待所有MapTask获取相应分区的数据
13)ReduceTask向MapTask获取相应的数据
14)程序运行完毕后,AppMaster会向ResourceManager申请注销自己