首先了解下资源调度管理框架Yarn。
Yarn的结构(如图):
Resource Manager (rm)负责调度管理整个集群上的资源,而每一个计算节点上都会有一个Node Manager(nm)来负责该节点上的计算资源,我们把计算资源抽象成一个个Container(容器),每个Container包含一定数量的cpu核数和一定大小的内存。一个应用程序由一个App Master 来管理,App Master 负责将一个程序运行在各个节点的Container中。
Yarn 组件分工:
1. Resource Manager
主要职责是调度,对应用程序的整体进行资源分配。
2. Container
单个节点的物理资源的集合,比如内存,cpu。
3. Node Manage
管理Container生命周期,资源使用情况,节点健康状况,并且将这些信息汇报给Recource Manager。
4. Application Master
协调集群中的应用程序,与Resource Manager协商资源,并且将这个应用程序运行在集群之中。
MapReduce程序如何在集群上执行?
执行过程:
- mr会在客户端启动,客户端会向rm 发送一个 app 请求,rm会返回一个appid给客户端,
- 客户端会拿着appid,用户名,队列,令牌向rm进行请求,
- 客户端会将应用程序所用的jar包,资源文件,以及程序运行时所需要的数据传送到hdfs,
- rm会分配一个container0的资源包,由nm启动一个 appmaster
- rm将集群容量信息发送给appmaster,
- appmaster计算这个程序需要的资源量
- 向rm 请求分配更多的container
- nm在各个节点上启动map任务和reduce任务。
总结:
- 客户端提交mr程序,向rm请求资源,并将程序依赖的资源上传到hdfs,
- Rm分配一个container0,nm启动am,用来管理这个mr程序,am计算好所需要的资源后向rm请求更多的资源。
- nm在各个节点上启动map task和reduce task