知识讲解之前,我们先来听一段小故事(不要带入现实)
健鑫集团是一家公司,主要业务就是承接其他公司外包出去的项目,这地方是怎么运行的呢?
外部想和集团达成合作,草拟个合同直接和 Boss谈,Boss 来者不拒,签完之后让对方将有关这个项目所有的东西发送到自己的邮箱。所有东西到位之后,Boss就开始在内部广而告之:“何人敢承接此项目?”这时就会有人站出来,这里叫他路人甲。
然后 Boss 将这个项目交给了这个路人甲,路人甲进行评估之后向 Boss 申请了一笔启动资金,并让他根据所需人力调动其他员工,这里叫他们炮灰乙。
在工作的过程中,路人甲也要将自己手里的一些资源分给炮灰乙,同时对进行进行跟踪来让他们完成任务,也要定期向 Boss 汇报。最后活干完了,路人甲交差完毕之后,又重新化身为了炮灰乙。
现在让我们把上面的故事转换成yarn:
Boss :ResourceManager(后面简称RM),负责整个系统
陆人甲:ApplicationMaster(后面简称AM),负责具体的应用
炮灰乙:nodeManager(后面简称NM)
项目启动资金:container
client向RM提交任务申请一个application,然后客户端将对应的资源提交到 RM 返回的对应路径上(配置文件、jar包等),RM将用户的请求i初始化成一个task,放入调度队列,NM领取任务创建container启动AM
AM向RM申请资源,(在 map 阶段,有几个切片就会启动几个mapTask,相应也会有几个NM)
AM将任务分配给NM并创建container,向NM发送启动脚本
程序运行完毕,AM会向RM申请注销自己
END
如果这篇文章帮助到你,不妨点个赞,你的支持是我最大的动力