自用华为ICT云赛道Big Data第四章知识点-MapReduce,Yarn

91 阅读6分钟

MapReduce概述

MapReduce基于Google发布的MapReduce论文设计开发,基于分而治之的思想,用于大规模数据集(大于1TB)的并行计算和离线计算,具有如下特点:

  1. 高度抽象的编程思想:程序员仅需描述做什么,具体怎么做交由系统的执行框架处理。
  2. 良好的扩展性:可通过添加节点以扩展集群能力。
  3. 高容错性:通过计算迁移或数据迁移等策略提高集群的可用性与容错性。

资源调度与分配

  • 在Hadoop1.0版本中,只有HDFS和MapReduce,而资源调度通过MRv1来进行,存在着很多缺陷:
  1. Master是单点,故障恢复依赖于周期性的Checkpoint,不保证可靠性,发生故障的时候会通知用户,由用户自行决定是否重新计算。
  2. 没有区分作业调度与资源调度。MapReduce在运行时,环境会有大量的Job并发,因此多样且高效的调度策略是非常重要的。
  3. 没有提到资源隔离与安全性,大量Job并发的时候,如何保证单个Job不占用过多的资源,如何保证用户的程序对系统而言是安全的,在Hadoop1.0中是个大问题。
  • 因此,针对Hadoop1.0中MRv1的不足,以及为了满足编程范式多样化的需求,Hadoop2.0中正式引入了Yarn框架,以便更好地完成集群的资源调度与分配。

Yarn概述

  • Apache Hadoop YARN(Yet Another Resource Negotiator),中文名为“另一种资源协调者”。它是一种新的Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

image.png

MapReduce过程

  • MapReduce计算过程可具体分为两个阶段,Map阶段和Reduce阶段。其中,Map阶段输出的结果是Reduce阶段的输入。
  • 可以把MapReduce理解为,把一堆杂乱无章的数据按照某种特征归纳起来,然后处理并得到最后的结果。
  1. Map面对的是杂乱无章的互不相关的数据,它解析每个数据,从中提取出key和value,也就是提取了数据的特征。
  2. 到了Reduce阶段,数据是以key后面跟着若干个value来组织的,这些value有相关性。在此基础上我们可以做进一步的处理以便得到结果。

MapReduce工作流程

image.png

Map阶段详解

  • Job提交前,先将待处理的文件进行分片(Split)。MR框架默认将一个块(Block)作为一个分片。客户端应用可以重定义块与分片的映射关系。
  • Map阶段先把数据放入一个环形内存缓冲区,当缓冲区数据达到80%左右时发生溢写(Spill),需将缓冲区中的数据写入到本地磁盘。

image.png

Reduce阶段详解

  • 前面提到的MOF文件是经过排序处理的。当ReduceTask接收的数据量不大时,则直接存放在内存缓冲区中,随着缓冲区文件的增多,MR后台线程将它们合并成一个更大的有序文件,这个动作是Reduce阶段的Merge操作,过程中会产生许多中间文件,最后一次合并的结果直接输出到用户自定义的Reduce函数。
  • 当数据很少时,不需要溢写到磁盘,直接在缓存中归并,然后输出给Reduce。

image.png

Shuffle过程详解

  • Shuffle的定义:Map阶段和Reduce阶段之间传递中间数据的过程,包括Reduce Task从各个MapTask获取MOF文件的过程,以及对MOF的排序与合并处理。

image.png

典型程序WordCount举例

image.png

WordCount程序功能

image.png

WordCount的Map过程

image.png

WordCount的Reduce过程

image.png

Yarn的组件架构

image.png

MapReduce On Yarn任务调度流程

image.png

Yarn HA方案

  • Yarn中的ResourceManager负责整个集群的资源管理和任务调度,Yarn高可用性方案通过引入冗余的ResourceManager节点的方式,解决了ResourceManager单点故障问题。

image.png

Yarn AppMaster容错机制

image.png

资源管理

  • 每个NodeManager可分配的内存和CPU的数量可以通过配置选项设置(可在Yarn服务配置页面配置)。
  1. yarn.nodemanager.resource.memory-mb:可以分配给容器的物理内存的大小
  2. yarn.nodemanager.vmem-pmem-ratio:虚拟内存跟物理内存的比值
  3. yarn.nodemanager.resource.cpu-vcore:可分配给容器的cPu核数
  • 在Hadoop3.x版本中,YARN资源模型已被推广为支持用户自定义的可数资源类型(support user-defined countable resource types),而不是仅仅支持CPU和内存。
  • 常见的可数资源类型,除了CPU和Memory以外,还包括GPU资源、软件licenses或本地附加存储器(locally-attached storage)之类的资源,但不包括端口(Ports)和标签(Labels)。

YARN的三种资源调度器

  • 在Yarn中,负责给应用分配资源的叫做Scheduler(调度器)。在YARN中,根据不同的策略,共有三种调度器可供选择:
  1. FIFOScheduler:把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。
  2. CapacityScheduler:允许多个组织共享整个集群,每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,通过设置多个队列的方式给多个组织提供服务。除此之外,队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源了。在一个队列内部,资源的调度是采用的是FIFO策略。
  3. FairScheduler:为所有的应用分配公平的资源(对公平的定义可以通过参数来设置)。

容量调度器的介绍

  1. 容量调度器使得Hadoop应用能够共享的、多用户的、操作简便的运行在集群上,同时最大化集群的吞吐量和利用率。
  2. 容量调度器以队列为单位划分资源,每个队列都有资源使用的下限和上限。每个用户可以设定资源使用上限。管理员可以约束单个队列、用户或作业的资源使用。支持作业优先级,但不支持资源抢占。
  3. 在Hadoop3.x中,OrgQueue扩展了容量调度器,通过RESTAPI提供了以编程的方式来改变队列的配置。这样,管理员可以在队列的administer_queueACL中自动进行队列配置管理。

资源分配模型

  1. 调度器维护一群队列的信息。用户可以向一个或者多个队列提交应用。
  2. 每次NM心跳的时候,调度器根据一定的规则选择一个队列,再在队列上选择一个应用,尝试在这个应用上分配资源。
  3. 调度器会优先匹配本地资源的申请请求,其次是同机架的,最后是任意机器的。

image.png

增强特性-Yarn动态内存管理

image.png

增强特性-Yarn基于标签调度

image.png

缩略语

image.png