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的优先级等