MapReduce

什么是MapReduce

MapReduce的核心思想为分治。将一个大的问题,分解为很多个小问题,将小问题进行并行计算。

MapReduce过程

下图为MapTask阶段。
Hadoop(五)MapReduce与Yarn

Read阶段–》Map阶段–》Collect阶段–》spill阶段–》Combine阶段

Map阶段
1、将文件进行切片,分片后的文件分别进行map计算,转换为key value值集合

  • 例如文件中有词:abc abd abc ab
  • 转换成 <abc,1>,<abc,1>,<ab,1>,<abd,1>

2、接收key,value集合,自定义自己的map逻辑。然后转换成新的key2,value2集合进行输出

  • <abc,[1,1]>,<ab,1>,<abd,1>

Shuffle阶段
3、分区:将相同的key,value发送归类到不同的分区中。(Map内部的一次reduce,将数据先在map节点内部进行整合)。
4、排序
5、规约
6、分组:key合并,value形成新的集合

Reduce阶段
Hadoop(五)MapReduce与Yarn

7、接收key2,value2。转换成新的key3,value3进行输出。

  • <abc,2>,<ab,1>,<abd,1>

8、将key3,value3进行输出

MapReduce架构

在Hadoop的MapReduce框架中主要涉及到两个组件:JobTracker和TaskTracker(HDFS中的组件是NameNode和DataNode)。

TaskTracker

TaskTracker一个hadoop计算进程,运行在hadoop集群的datanode节点上。taskTracker的主要任务是运行JobTracker分配给它的实际计算任务,如运行Map、Reduce函数,当然也包括Shuffle过程。

JobTracker

JobTracker进程的作用是运行和监控MapReduce的Job,当一个客户端向JobTracker提交任务时,过程如下图:

Hadoop(五)MapReduce与Yarn

  1. JobTracker接收Job请求
  2. JobTracker根据Job的输入参数向NameNode请求包含这些文件数据块的DataNode节点列表
  3. JobTracker确定Job的执行计划:确定执行此job的Map、Reduce的task数量,并且分配这些task到离数据块最近的节点上
  4. JobTracker提交所有task到每个TaskTracker节点。TaskTracker会定时的向JobTracker发送心跳,若一定时间内没有收到心跳,JobTracker就认为这个TaskTracker节点失败,然后JobTracker就会把此节点上的task重新分配到其它节点上
  5. 一旦所有的task执行完成,JobTracker会更新job状态为完成,若一定数量的task总数执行失败,这个job就会被标记为失败
  6. JobTracker发送job运行状态信息给Client端

MapReduce计数器

计数器hadoop内置的,是收集作业统计信息的有效手段之一,用于质量控制或应用级统计。

MapReduce中的规约

Yarn

什么是Yarn

Yarn在2.x中替换了MapReduce,作为资源管理器存在。Yarn不处理请求,只是用来分配资源计算。对于Mapreduce来说其包含两个部分的功能。

  1. ResourceManagement 资源管理
  2. JobScheduling/JobMonitoring 任务调度监控

到了Hadoop2.x也就是Yarn,它的目标是将这两部分功能分开,也就是分别用两个进程来管理这两个任务(以前MapReduceV1是一个进程):

  1. ResourceManger
  2. ApplicationMaster

Yarn的主要组成为:

  1. ResourceManager:Global(全局)的进程 由Scheduler和ApplicationManager构成
    - Scheduler:是ResourceManager的一个组件。资源调度器,它主要负责协调集群中各个应用的资源分配。它只负责调度Containers。Scheduler是一个可插拔的插件,它可以调度集群中的各种队列、应用等。
    - ApplicationManager:是ResourceManager的一个组件。主要负责接收job的提交请求,为应用分配第一个Container来运行ApplicationMaster,还有就是负责监控ApplicationMaster
  2. NodeManager:运行在每个节点上的进程
  3. ApplicationMaster:Application-specific(应用级别)的进程
  4. Container:节点上一组CPU和内存资源

Hadoop(五)MapReduce与Yarn

Yarn组件

Container

一个Container就是一组分配的系统资源。Container是Yarn框架的计算单元,是具体执行应用task(如map task、reduce task)的基本单位。Container和集群节点的关系是:一个节点会运行多个Container,但一个Container不会跨节点。

Node Manager

NodeManager进程运行在集群中的节点上,每个节点都会有自己的NodeManager。NodeManager是一个slave服务:它负责接收ResourceManager的资源分配请求,分配具体的Container给应用。

Resource Manager

Global(全局)的进程。由ApplicationManager和Scheduler组成

Scheduler是一个资源调度器,它主要负责协调集群中各个应用的资源分配,保障整个集群的运行效率。Scheduler的角色是一个纯调度器,它只负责调度Containers,不会关心应用程序监控及其运行状态等信息。同样,它也不能重启因应用失败或者硬件错误而运行失败的任务

Scheduler是一个可插拔的插件,它可以调度集群中的各种队列、应用等。在Hadoop的MapReduce框架中主要有两种Scheduler:Capacity Scheduler和Fair Scheduler,关于这两个调度器后面会详细介绍。

另一个组件ApplicationManager主要负责接收job的提交请求,为应用分配第一个Container来运行ApplicationMaster,还有就是负责监控ApplicationMaster,在遇到失败时重启ApplicationMaster运行的Container。

Application Master

ApplicationMaster的主要作用是向ResourceManager申请资源并和NodeManager协同工作来运行应用的各个任务然后跟踪它们状态及监控各个任务的执行,遇到失败的任务还负责重启它

Hadoop(五)MapReduce与Yarn

相关文章:

  • 2021-11-12
  • 2021-11-20
  • 2021-12-12
  • 2021-04-20
  • 2021-07-18
  • 2021-10-27
  • 2021-06-02
猜你喜欢
  • 2022-01-12
  • 2021-10-22
  • 2021-08-06
  • 2022-02-21
  • 2021-04-07
  • 2021-08-14
相关资源
相似解决方案