1. YARN介绍
- YARN负责资源调度和分配:用户程序(mapreduce/storm/spark等)向YARN申请资源,YARN负责资源分配
- YARN有两种角色:ResourceManager(主)、NodeManager(从)
- 端口:8088
- 启动:start-yarn.sh
2. YARN流程
- 客户端运行job.waitForCompletion()
调用job.submit(),产生job信息(包/分片/配置信息),还产生YarnRunner(客户端和Yarn打交道)
- 客户端(YarnRunner)向ResourceManeger(rm)申请运行一个job
- rm就返回一个jobid和job资源提交路径(hdfs://...)
- 客户端提交job资源到hdfs上的指定路径
- 客户端告诉mr资源提交成功
- rm就初始化任务信息,并把任务加载到任务调度队列
- NodeManager(nm)从rm领取任务
- nm去hdfs上获取job信息,根据信息创建一个容器(container)
- 客户端发送shell命令到nm,来启动一个MrAppMaster(mr)
- mr向rm申请资源(申请几个nm上的容器)
- rm根据mr的申请,创建任务,加载到任务调度队列
- nm领取任务,创建容器
- mr启动MapTask(启动ReduceTask)
- 运算结束后,mr通知rm注销自身,让rm回收资源
3. 任务调度
- 先进先出(默认)
- 容量调度器:一个大队列(处理大任务)、一个小队列(处理小任务。没有小任务时,仍然预留着这些资源)
- 公平调度器:有小任务后,动态分配一些资源给这个小任务