Yarn问答题
一、MR中的一个Job是如何提交的?
提交Job:底层通过submitJobInternal ()方法完成提交
具体步骤:
- 检测输入输出路径合法性
- 路径非法直接抛异常
- 路径合法开始计算文件切片信息
- 计算文件切片信息
- 确定最终开启的MT数量
- 检测是否有分布式缓存文件
- 如果有,设置到Job中
- 将当前运行的jar包、切片信息、配置信息放入临时产生、用于保存job信息的文件夹下
- 准备就绪,提交完成
二、描述一下YARN的工作机制。
(1)MR程序提交到客户端所在的节点。
(2)YarnRunner向ResourceManager申请一个Application。
(3)RM将该应用程序的资源路径返回给YarnRunner。
(4)该程序将运行所需资源提交到HDFS上。
(5)程序资源提交完毕后,申请运行mrAppMaster。
(6)RM将用户的请求初始化成一个Task。
(7)其中一个NodeManager领取到Task任务。
(8)该NodeManager创建容器Container,并产生MRAppmaster。
(9)Container从HDFS上拷贝资源到本地。
(10)MRAppmaster向RM 申请运行MapTask资源。
(11)RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
(12)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
(13)MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
(14)ReduceTask向MapTask获取相应分区的数据。
(15)程序运行完毕后,MR会向RM申请注销自己。
三、YARN中有几种资源调度实现策略?分别阐述一下各自的特点
FIFO先进先出:单队列,提交任务后把job放入该队列中,谁先进队列谁先执行,特点是串行执行,效率不高
容量:多条FIFO队列,可以指定额定资源占比和最大资源占比以及还可以配置job优先级,使用灵活
公平:在容量的基础上升级改造,一定条件下就是容量策略,特点是所有job在资源充足的情况下可以并行运行
四、简述一下如何配置一个自定的队列?
修改Yarn的capacity-scheduler.xml配置文件:
指定队列的名称以及相关的属性配置
配置额定容量和最大容量以及队列中运行的Job的优先级等