【原创】MapReduce程序如何在集群上执行

首先了解下资源调度管理框架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程序如何在集群上执行?

 

执行过程:

  1. mr会在客户端启动,客户端会向rm 发送一个 app 请求,rm会返回一个appid给客户端,
  2. 客户端会拿着appid,用户名,队列,令牌向rm进行请求,
  3. 客户端会将应用程序所用的jar包,资源文件,以及程序运行时所需要的数据传送到hdfs,
  4. rm会分配一个container0的资源包,由nm启动一个 appmaster
  5. rm将集群容量信息发送给appmaster,
  6. appmaster计算这个程序需要的资源量
  7. 向rm 请求分配更多的container
  8. nm在各个节点上启动map任务和reduce任务。

总结:

  1. 客户端提交mr程序,向rm请求资源,并将程序依赖的资源上传到hdfs,
  2. Rm分配一个container0,nm启动am,用来管理这个mr程序,am计算好所需要的资源后向rm请求更多的资源。
  3. nm在各个节点上启动map task和reduce task
原文地址:https://www.cnblogs.com/yx-zhang/p/9572378.html