(1)在Hadoop1.x中,通过设置mapred.job.tracker来决定执行mapreduce机制,如果设置为local,则使用本地的作业运行器,如果设置为主机和端口号,则这个地址被解析为一个jobtracker地址,运行器则将作业提交给jobtracker。
它主要由以下几个组件组成:Client、JobTracker、TaskTracker、Task
(2) 在hadoop2.x中,mapreduce运行在YARN上,通过mapreduce.framework,name属性设置,local表示本地运行,classic表示经典mapreduce框架,yarn表示新的框架。
MapReduce和YARN的关系
Hadoop2.MapReduce(MRv2)与Hadoop1.MapReduce(MRv1)在编程接口、数据处理引擎(Map Task、ReduceTask)是完全一样的,可以认为MRv2重用了MRv1的这些模块,不同的是资源管理和作业管理系统,MRv1中资源管理和作业管理均是由JobTracker实现的,集两个功能于一身,而在MRv2中,将这两部分分开了,其中,作业管理由ApplicationMaster实现,资源管理由新增系统YARN完成,YARN具有通用性,因此YARN也可以作为其他计算框架的资源管理系统,不仅限于MapReduce,也是其他计算框架,比如Spark、Strom等。
MapReduce1体系架构
它主要由以下几个组件组成:Client、JobTraker、TaskTrack、Task
(1)Client
用户编写的MapReduce程序通过Client提交到JobTracker端,同时,用户可通过Client提供的一些接口查看作业运行状态。在Hadoop内部用“作业(Job)“表示MapReduce程序。一个MapReduce程序可对应若干个作业,而每个作业会被分解为若干个Map/Reduce任务(Task)。
(2)JobTracker
JobTracker主要负责资源监控和作业调度。JobTracker监控所有TaskTracker与作业Job的健康情况,一旦发现失败情况后,其会将相应的任务转移到其他节点;同时,JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源。在Hadoop中,任务调度器是一个可插拔的模块,用户可以根据自己的需要设计相应的调度器。
(3)TaskTracker
TaskTracker会周期性地通过Heartbet将本节点上资源的使用情况和任务的运行进度汇报汇报给JobTracker,同时接受JobTracker发送过来的命令并执行相应的操作(如启动新任务、杀死任务等)。TaskTracker使用”slot“等量划分本节点上的资源量。”slot“代表计算资源(CPU、内存等)。一个Task获取到一个slot后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker的空闲slot分配给Task使用。skot分为Map slolt和Reduce slot,分别供给Map Task和Reduce Task使用。TaskTracker通过slot数目(可配置参数)限定Task的并发度。
(4)Task
Task分为Map Task和Reduce Task,均由TaskTracker启动。HDFS以固定大小的block块为基本单位存储数据,而对MapReduce而言,起处理单位是split。split与block的对应关系如下图所示。split是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。但需要注意的是,split的多少决定了Map Task得数目,因为每个split会交给一个Map Task处理。
Map Task 执行过程如下图所示。由该图可知,Map Task 先将对应的split 迭代解析成一 个个 key/value 对,依次调用用户自定义的map() 函数进行处理,最终将临时结果存放到本地磁盘上,其中临时数据被分成若干个partition(分片),每个partition 将被一个Reduce Task处理。
Reduce Task执行过程如下图所示。该阶段分为三个阶段:
(1)从远程节点上读取Map Task中间结果(称为“Shuffle阶段”)
(2)按照key/value对及进行排序(称为“Sort”阶段)
(3)依次读取
YARN(MRv2)体系架构
1、YARN是什么?
YARN是资源管理系统,从MRv1演化而来,其核心是思想是:将MR1中JobTracker的资源管理和作业调用两个功能分开,分别由ResourceManger和ApplicationMaaster进程来实现。
(1)ResourceManger:负责整个集群的资源管理和调度
(2)ApplicationMaster:负责应用程序相关事务,比如任务调度、任务监控、容错等,每一个应用程序对应一个ApplicationMaster
2、YARN架构
主要由ResourceManger、NodeManger、ApplicationMaster、Container等以下几个组件构成
(1)ResourceManger(RM)
YARN分层结构的本质是ResourceManger,负责整个系统的资源管理和分配,主要包括调度器Schedule和AM两个核心组件。RM将各个资源部分(计算、内存、带宽等)安排给基础NM(YARN得每个节点代理)。RM还与AM一起分配资源,与NM一起启动和监视他们的基础应用程序。再此上下文中,AM承担了以前的TaskTracker的一些角色,RM承担了JobTracker的角色。
调度器Schedule接收来自AM的应用程序资源请求,把集群中的资源以Container的形式分配给申请的应用程序
容器container作为动态资源分配单位,每个容器中都封装了一定数量的CPU、内存、磁盘等资源,
总的来说,RM有以下作用:
1)处理客户端请求
2)启动/监控AM
3)监控NM
4)资源的分配与调度
(2)ApplicationMaster(AM)
RM接收用户提交的作业,按照作业的上下文信息以及从AM收集来的容器状态信息,启动调度过程,为用户作业启动一个AM
AM的主要功能是:
1)当用户作业提交时,AM与RM获取资源,RM会以容器的形式为AM分配资源
2)把获取的资源进一步分配给各个任务(Map/Reduce)
3)与NM保持交互通信进行应用程序的启动、运行、监控和停止,监控申请到的资源使用情况,对所有任务的执行进度和状态进行监控,并在任务发生失败时执行失败恢复(即重新申请资源重启任务)
4)定时向RM发送”心跳“消息,报告资源的使用情况和应用的进度消息
5)当作业完成时,AM向RM注销容器,执行周期完成
总的来说,AM有以下作用:
1)位应用程序申请资源并分配给内部的任务
2)任务的监控与容错
(3)NodeManger(NM)
NM管理YARN集群中的每个节点。NM提供针对集群中每个节点的服务,从监督对一个容器的终身管理到监视资源和跟踪节点健康。容器代表着可供一个特定应用程序使用的针对每个节点的资源。
总的来说,NM有以下作用:
1)管理单个节点上的资源
2)处理来自RM、AM的命令
需要说明的是:NM主要负责管理抽象的容器,只处理与容器相关的事情,而不具体负责每个任务自身状态的管理,因为这些管理工作是由AM完成的,AM会通过不断与NM通信来掌握各个任务的执行状态
(4)Container
Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用COntainer表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。