1、Yarn基础框架
Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。
YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成。
(1)ResourceManager(RM):
整个集群资源的管理者,进行资源的分配和调度;处理客户端请求;监控NodeManager的运行情况;启动和监控ApplicationMaster。
(2)NodeManager(NM):
对单节点即单台服务器进行资源管理和调度;处理ResourceManager的命令;处理ApplicationMaster的命令(因为任务提交到AM会由NM向RM申请资源,申请之后在NM上运行)。
(3)ApplicationMaster(AM):
为作业向RM申请资源,由RM根据资源情况再分配;任务的监控和容错(当节点挂了之后可以向RM再申请容器,在容器里运行MapTask)。
(4)Container(容器):相当于容器,封装了资源(内存、CPU、磁盘等)。
2、Yarn工作机制
(0)MR程序提交到客户端所在的节点,在集群模式中运行MR程序,当运行到主函数的waitForCompletion()函数时创建YarnRunner(本地模式是LocalRunner)。
(1)YarnRunner向ResourceManager申请一个Application运行任务。
(2)RM将该应用程序的资源路径返回给YarnRunner,让YarnRunner把提交的job放到集群路径上。
(3)该程序将运行所需资源提交到HDFS集群路径上,包括split切片信息(控制开启MapTask的数量)、配置参数文件xml(控制任务按照xml里的参数运行)以及jar包(程序代码)。
(4)程序资源提交完毕后,YarnRunner申请运行MrAppMaster。
(5)RM将用户的请求初始化成一个Task任务,然后放到任务队列中排队(任务队列默认是容器)。
(6)空闲NodeManager领取Task任务。
(7)该NodeManager创建容器Container(任务的执行只能发生在容器中,容器中封装了资源),并在容器中启动MRAppmaster进程。
(8)Container从HDFS集群路径上拷贝资源(即切片信息等)到本地。
(9)容器拿到切片信息后,由MRAppmaster向RM 再次申请运行MapTask(切片个数=MapTask个数,有多少切片就申请开启多少MapTask)。
(10)RM将运行MapTask任务分配给NodeManager,NodeManager领取任务并创建容器(MapTask对应的容器有可能在同一个NodeManager节点上),并拷贝cpu、ram和jar包资源。
(11)MRAppMaster向接收到任务的NodeManager发送程序启动命令,NodeManager分别启动MapTask,然后开启YarnChild进程。MapTask运行结束后对数据进行分区排序并持久化到磁盘等待ReduceTask拉取。
(12)MrAppMaster等待所有MapTask运行完毕后,向RM再次申请容器运行ReduceTask程序(有多少分区就开启多少ReduceTask)。开启任务之前依旧是先开对应的容器,在容器里启动ReduceTask,ReduceTask对应的进程是YarnChild。
(13)ReduceTask向MapTask获取相应分区的数据。
(14)ReduceTask程序运行完毕后,MrAppMaster会向RM申请注销自己,释放容器等资源。