Spark、MR任务执行过程,不管是那种应用的执行,都离不开资源分配。这类问题我们可以先从资源分配这个角度进行阐述,这个角度搞清楚了,相信在面试过程中很多问题,都能迎刃而解。
我们以资源调度工具Yarn为例,先简单了解下yarn的前世今生,在hadoop1.x的年代,资源管理是靠JobTracker来完成,JobTracker 主要完成资源管理和作业调度/监控,那这种设计方式缺点显而易见:单点故障,任务过重。yarn的设计就是把这些任务角色剥离,分散到不同的进程中去单独部署处理。
那么yarn到底是有什么组成的?通俗的话来讲,分为以下几个
1)资源管理的单位:Container,他是Yarn中资源的抽象,把节点上的资源做了一个封装,目前只有内存和CPU。
2)资源管理的老大:ResourceManager 简称RM,他是负责系统中所有可用资源的管理和调度。那我集群中有多少资源可以用,是谁告诉ResourceManager 的呢?那就是第二个角色NodeManager。
3)资源管理的小兵:NodeManager,他分布在各个计算节点上,定时向ResourceManager 汇报节点的可用资源如cpu,内存(Container)。监控每个Container 杀死。
4)我们提交的任务的管理者:ApplicationMaster简称AM,我们提交的每一个任务都会对应一个AM,他负责这个作业的资源申请(和ResourceManager申请),作业监控,作业容错等。
了解了上面几个角色的职责,那么我们的任务是如何提交的就比较好理解了。我们可以分为以下5个步骤。
1:用户将应用程序提交到ResourceManager上。
2:ResourceManager与某个NodeManager通信为当前程序的ApplicationMaster申请一个Container。申请完成后,ApplicationMaster在此容器中启动。
3:ApplicationMaster与ResourceManager通信,申请我们程序所需要的资源。
4:资源申请到之后,ApplicationMaster与NodeManager通信,在分配资源的节点上启动对应的任务。
5:任务完成后,ApplicationMaster向ResourceManager注销。应用程序结束。
再来看一下Apache Hadoop YARN官方文档上的工作示意图,是不是就很明确啦?
评论留言