微信公众号:北风中独行的蜗牛
YARN 集群也分为Master/Slave架构,主要由ResourceManager,NodeManager, ApplicationMaster,Container等组成。
ResourceManager 全局资源管理器,负责整个系统的资源管理分配和任务调度。ResourceManager包含Scheduler调度器和应用程序管理器Application mananger。调度器只是负责资源的分配,资源分配的单位是container,应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它等。
NodeManager是每个节点上的资源和任务管理器,它会向ResourceManager定时汇报本节点的资源使用情况和各个Container的运行状态,同时会接受处理来自ApplicationMaster的对Container的启动/停止请求。NodeManager不会监视具体的任务,他仅监视Container的使用情况。
Task是应用程序的具体任务。例如map任务,reduce任务等
Container是Yarn中的资源的具体分配单位,封装了CPU和内存资源的容器,相当于是一个Task的运行环境的具体抽象。从实现上看,Container是一个抽象类,里面定义资源信息。在NodeManager节点上拥有许多动态创建的Container。NodeManager会将计算机的CPU和内存的一定值抽离成虚拟值,然后这些虚拟值根据配置组成多个Container,当应用提出申请的时候,会分配相应的Container。
应用程序运行的Container也分为两类,一类是运行的ApplicationMaster的Container,一类是运行Task的Container。前者是由ResourceManager向内部的调度器申请和启动,后者是由ApplicationMaster向ResourceManager申请,并由ApplicationMaster请求NodeManager启动ApplicationMaster应用内程序管理者。它向ResourceManager申请资源,CPU内存等,并将资源分配给task。一个应用程序对应一个applicationMaster。在用户提交一个应用程序的时候,会启动一个ApplicationMaster实例,ApplicationMaster会启动所需要的的Task,并监控task的运行状态,进度等。应用程序执行完之后,ApplicationMaster会关闭自己并释放Container。
MapReduce的处理过程:
- 提交MapReduce程序到ResourceManager
- ResourceManager分配container,并要求NodeManager启动APPMaster。 AppMaster负责此应用程序的整个生命周期。
- AppMaster向ResourceManager注册(注册成功后,可以通过ResourceManager查看应用程序运行的状态)。AppMaster请求各个应用程序所需要的container
- AppMaster请求NodeManager使用这些Container运行task。
- 各个Task通过RPC协议向AppMaster汇报自己的运行状态和进度,如果task运行失败,AppMaster可以要求重新启动。当所有的task完成,AppMaster向ResourceManager注销自己。
欢迎关注我的微信公众号: 北风中独行的蜗牛
[图片上传失败...(image-4e3b92-1592530565628)]