1. yarn的各个组件
yarn的组成可以从两个角度看待:
- 从node(节点)的角度看,yarn是由多个node组成的:1个nameNode(Master)和多个dataNode(Slaver). (此外,可能有1个SecondaryNameNode,作为nameNode的备用)
- 从组件的角度看,yarn分为:
- ResourceManager。由ApplicationManager和Scheduler组成
- NodeManager
- Container
其中,在master node上运行ResourceManager。 每个datanode上运行一个NodeManager。 并把该dataNode上的所有计算资源(CPU、内存)视为一个/多个Container,而Container可以被分配执行一个task(ApplicationMaster、map task、reduce task等)。
具体可看下图:
yarn各个组件以及相互的关系
2. yarn各个组件的功能
可结合上文的图片理解
2.1 Container
Container是Yarn框架的计算单元,是具体执行应用task(如map task、reduce task)的基本单位。 Container和集群节点的关系是:一个节点会运行多个Container,但一个Container不会跨节点。
正由于"一个节点会运行多个Container"的特性,ApplicationMaster进程可能与它管理的task运行在同一个节点上。
一个Container就是一组分配的系统资源,现阶段只包含两种系统资源(之后可能会增加磁盘、网络等资源):
代码语言:javascript复制1. CPU core
2. Memory in MB
既然一个Container指的是具体节点上的计算资源,这就意味着Container中必定含有计算资源的位置信息:计算资源位于哪个机架的哪台机器上。所以我们在请求某个Container时,其实是向某台机器发起的请求,请求的是这台机器上的CPU和内存资源。
任何一个job或application必须运行在一个或多个Container中。在Yarn框架中,ResourceManager只负责告诉ApplicationMaster哪些Containers可以用,ApplicationMaster还需要去找NodeManager请求分配具体的Container。
2.2 NodeManager
NodeManager进程运行在集群中的节点上,每个节点都会有自己的NodeManager。NodeManager是一个slave服务:
- 它负责接收ResourceManager的资源分配请求,分配具体的Container给应用。
- 同时,它还负责监控并报告Container使用信息给ResourceManager。
通过和ResourceManager配合,NodeManager负责整个Hadoop集群中的资源分配工作。 NodeManager只负责管理自身的Container,它并不知道运行在它上面应用的信息。负责管理应用信息的组件是ApplicationMaster,在后面会讲到。
2.3 ResourceManager
ResourceManager主要有两个组件:Scheduler和ApplicationManager。
2.3.1 Scheduler
- Scheduler是一个资源调度器,它主要负责协调集群中各个应用的资源分配,保障整个集群的运行效率。Scheduler的角色是一个纯调度器,它只负责调度Containers,不会关心应用程序监控及其运行状态等信息。同样,它也不能重启因应用失败或者硬件错误而运行失败的任务
- Scheduler是一个可插拔的插件,它可以调度集群中的各种队列、应用等。在Hadoop的MapReduce框架中主要有两种Scheduler:Capacity Scheduler和Fair Scheduler
2.3.2 ApplicationManager
另一个组件ApplicationManager的功能如下:
- 主要负责接收job的提交请求,为应用分配第一个Container来运行ApplicationMaster
- 还有就是负责监控ApplicationMaster
- 在遇到失败时重启ApplicationMaster运行的Container
2.4 ApplicationMaster
ApplicationMaster运行在Container中。 ApplicationMaster的主要作用是向ResourceManager申请资源并和NodeManager协同工作来运行应用的各个任务然后跟踪它们状态及监控各个任务的执行,遇到失败的任务还负责重启它。
3. yarn的应用执行过程
1.client向yarn提交job,首先找ResourceManager分配资源, 2.ResourceManager开启一个Container,在Container中运行一个Application manager 3.Application manager找一台nodemanager启动Application master,计算任务所需的计算 4.Application master向Application manager(Yarn)申请运行任务所需的资源 5.Resource scheduler将资源封装发给Application master 6.Application master将获取到的资源分配给各个nodemanager 7.各个nodemanager得到任务和资源开始执行map task 8.map task执行结束后,开始执行reduce task 9.map task和 reduce task将执行结果反馈给Application master 10.Application master将任务执行的结果反馈pplication manager。
参考
各个组件的功能
- https://yq.aliyun.com/articles/5896
- https://blog.csdn.net/tanggao1314/article/details/51223335
一个Job的提交过程 https://www.cnblogs.com/yangsy0915/p/5559969.html
功能与运行过程 https://blog.csdn.net/yu0_zhang0/article/details/78907178
ResourceManager详解 http://dongxicheng.org/mapreduce-nextgen/yarnmrv2-resource-manager-infrastructure/
namenode与dataNode关系 https://blog.csdn.net/u011414200/article/details/50350154
解析Partition https://www.cnblogs.com/xwdreamer/archive/2011/10/27/2296943.html