MapReducer2.0原理

 MapReduce是一个用于大规模数据处理的分布式计算模型,最初由Google工程师设计并实现的,Google已经将完整的MapReduce论文公开发布了。其中的定义是,MapReduce是一个编程模型,是一个用于处理和生成大规模数据集的相关的实现。用户定义一个map函数来处理一个Key-Value对以生成一批中间的Key-Value对,再定义一个reduce函数将所有这些中间的有相同Key的Value合并起来。很多现实世界中的任务都可用这个模型来表达。
下面我画了一张图,便于理解MapReduce得整个工作原理

MapReducer2.0原理
MapReducer2.0原理
步骤:
1.在客户端写好MapReducer程序,在客户端运行Job作业
2.客户端会向ResourceManage发送一个请求,申请一个Job作业ID.
3.客户端将作业运行所需的资源,比如作业JAR文件、配置文件等复制到HDFS中
4.提交作业.提交作业之前会进行检查.
.检查作业指定输出目录的路径是否存在,存在则抛异常给客户端(防止覆盖输出结果).
.检查作业的输入路径是否存在,如果不存在,作业也没法提交,抛异常给客户端.
5.对作业进行初始化,将Job任务交给作业调度器(ResourceScheduler)进行调度.(说明:
Hadoop作业的调度器常见的有3个:先进先出调度器;容量调度器;公平调度器).初始
化包括创建一个表示正在运行作业的对象——封装任务的记录信息,以便跟踪任务的状
态和进程.
6.ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager
通信,要求它在这个Container中启动应用程序的ApplicationMaster.
7.ApplicationMaster从HDFS上获取分片信息,根据分片信息创建map任务(一个分片对
应一个map任务).
8.ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过
ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它
的运行状态,直到运行结束,
9.ResourceManager让ResourceScheduler通过RPC协议给各个任务分配领取资源.
10.ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务
11.NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)
后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
12.各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让
ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动
任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程
序的当前运行状态
13.应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己
下面对上面出现的一些名词进行介绍
ResourceManager(RM):
RM是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications ManagerASM).
Scheduler)调度器
调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。需要注意的是,该调度器是一个纯调度器,它不再从事任何与具体应用程序相关的工作,比如不负责监控或者跟踪应用的执行状态等,也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务,这些均交由应用程序相关的ApplicationMaster完成。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位用一个抽象概念资源容器Resource Container,简称Container)表示,Container是一个动态资源分配单位,它将内存、 CPU、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量。此外,该调度器是一个可插拔的组件,用户可根据自己的需要设计新的调度器,YARN提供了多种直接可用的调度器,比如Fair SchedulerCapacity Scheduler等。
Applications Manager
应用程序管理器(Applications ManagerASM
应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它等。
.ApplicationMaster(AM):
用户提交的每个应用程序均包含1AM,主要功能包括:
RM调度器协商以获取资源(用Container表示);
将得到的任务进一步分配给内部的任务;
NM通信以启动/停止任务;
监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。 
NodeManager(NM):
NM是每个节点上的资源和任务管理器,一方面,它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,它接收并处理来自AMContainer启动/停止等各种请求.
客户端(client):
编写mapreduce程序,配置作业,提交作业,这就是程序员完成的工作.
HDFS(分布式存储系统):
保存作业的数据、配置信息等等,最后的结果也是保存在hdfs上面.