BigData~03:Hadoop04 ~ YARN
2018-07-25 本文已影响7人
帅可儿妞
今天来探讨一下Yarn的集群
一、相关概念
- Yarn是Hadoop在2.0版本中引入的的资源管理系统;
- Yarn在1版本的时候有个东东
JobTracker
,Yarn就是这个东东在2版本的时候拆分JobTracker
得到的一个服务,另外一个是ApplicationMaster
;
二、Yarn的工作流程
- 当我们在一台机器上使用Hadoop启动我们程序打的jar包,在运行到submit/waitCompletion的时候,程序生成了一些任务执行规划,submit持有一个YARNRunner的代理程序向ResourceManager发出请求申请两个资源:执行规划的提交路径(形如:hdfs://....../.staging),还有就是applicationId;
- 当YARNRunner获取到这些资源之后,就会向指定的路径上传这个执行规划,目标路径为hdfs://....../.staging/application_id/*;这个*指的就是这个应用的执行规划以及我们的jar,最后通知ResourceManager执行规划提交完成,并请求运行MRAppMaster;
- ResourceManager收到执行规划提交完成的消息封装成一个Task对象,接着就把这个Task交给Capacity调度器(默认调度器);这个调度器就找一台比较清闲的NodeManager,当做MRAppMaster;
- 当这台NodeManager接收到消息之后,先创建一个Container容器;
- 当上面的准备工作完成后,这个机器上的MRAppMaster就启动了,再去HDFS上下载要处理的数据切片,读取执行规划信息,按照规划信息请求ResourceManager分配规划信息中切片个数台NodeManager来运行MapTask,分配的这些NodeManager在Yarn中叫做YarnChild;
- 这个时候ResourceManager就会分配相应个数的YarnChild给MRAppMaster,MRAppMaster就根据ResourceManager分配信息请求这些YarnChild,并把资源传递过去,还是创建容器;准备工作完毕后,把信息反馈给MRAppMaster,MRAppMaster就命令这些YarnChild启动容器;
- YarnChild启动后就会去执行自己的MapTask,并且每隔一定的时间向MRAppMaster汇报自己的状态,如果一个MapTask失败,MRAppMaster就会重新向ResourceManager申请再开一个YarnChild重新运行这个MapTask;如果有一台机器运行超级慢,MRAppMaster就会kill掉这个YarnChild重新申请运行这个MapTask;每个YarnChild执行完成后都会通知MRAppMaster;
- MRAppMaster收到通知后等待所有的YarnChild的MapTask都执行完毕之后又会去向ResourceManager申请资源执行ReduceTask;ResourceManager返回开辟的节点信息...,ReduceTask执行完成后,MRAppMaster会请求ResourceManager注销自己,此时所有的YarnChild会被ResourceManager回收;此过程和Map大致相同,不相同的是不同阶段处理数据调用的组件是不同的;
- 上面的流程要和上一节的MapReduce程序的运行流程结合起来看,因为全部写在一块会非常多,敬请见谅。