Yarn 的基本思想是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离,主要方法是创建一个全局的ResourceManager(RM)和若干个针对应用程序的ApplicationMaster(AM)。这里的应用程序是指传统的MapReduce作业或作业的DAG(有向无环图)。
- 首先Client(客户端)调用job.waitForCompletion 方法,向整个集群提交MapReduce作业;
- 这个时候YarnRunner 会向ResourceManager(RM) 申请一个Application(作业);
- 这时RM 会给Client 返回当前Job 资源的提交路径和 一个Application_id(作业ID);
- 收到申请到的作业ID后,Client提交jar 包、切片信息(.splits)和配置文件(.xml)到指定的资源提交路径;
- 程序资源提交完毕后,Client 接着向RM 请求运行MrAppMaster;
- RM 收到请求,将请求初始化成一个Task,并添加到 Capacity Scheduler(默认容量调度器);
- 待当某一个空闲的NodeManager(NM) 领取到该Task 任务;
- 该NM会创建一个Container(动态资源分配单位,它将内存、CPU、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量。),并产生MRAppmaster;
- 然后该NM会从HDFS上拷贝该Job所提交的资源到本地;
- 根据Job提交信息,MRAppmaster 会向RM 申请运行多个MapTask任务资源;
- RM 根据 MRAppmaster 的申请添加到 Capacity Scheduler。
- 待 有空闲的NodeManager 领取到该任务,会在本地也创建Container;
- 然后RM 会将领取到任务的NM 发送程序启动脚本;
- 脚本启动后,NM 会启动 MapTask 对数据进行处理;
- MrAppMaster 等待所有的MapTask运行完毕之后,又会向RM申请容器运行ReduceTask;
- ReduceTask向MapTask获取相应分区的的数据,进行运行;
- 当程序运行完毕,MrAppMaster会向RM注销自己。
目前,Hadoop作业调度器主要有三种:FIFO(先进先出)、Capacity Scheduler(容量 )和Fair Scheduler(公平)。Hadoop2.7.2默认的资源调度器是Capacity Scheduler。
The class to use as the resource scheduler. yarn.resourcemanager.scheduler.class org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)