开发者社区> ArimaMisaki> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

一幅长文细学华为MRS大数据开发(五)—— MapReduce和Yarn

简介: 本文中主要讲述大数据领域中最著名的批处理和离线处理计算框架——MapReduce,包括MapReduce的原理、流程、使用场景,以及Hadoop集群中负责统一的资源管理和调度的组件——Yarn。
+关注继续查看

5 MapReduce和Yarn

摘要:本文中主要讲述大数据领域中最著名的批处理和离线处理计算框架——MapReduce,包括MapReduce的原理、流程、使用场景,以及Hadoop集群中负责统一的资源管理和调度的组件——Yarn。

作者:来自ArimaMisaki创作

5.1 基本介绍

5.1.1 MapReduce概述

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

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


5.1.2 资源调度与分配

说明:在Hadoop1.0版本中,只有HDFS和MapReduce,而资源调度通过MRv1(即MapReduce1.x版本)来进行,因此存在很多缺陷。

缺点

  • master是单点,故障恢复依赖于周期性地checkpoint,不保证可靠性;发生故障的时候会通知客户,由用户自行决定是否重新计算。
  • 没有区分作业调度与资源调度;MR在运行时,环境会有大量的Job并发,因此多样而高效地调度策略是非常重要的。
  • 没有提到资源隔离和安全性;大量Job并发的时候,如何实现负载均衡以保证单个Job不占用过多的资源,如何保证用户的程序对系统而言是安全的,在Hadoop1.0中是个大问题。

yarn的出现:针对以上的缺点以及满足编程范式多样化的需求,Hadoop2.x版本中正式引入了Yarn框架,以便更好地完成集群的资源调度和分配。


5.1.3 Yarn概述

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


5.2 MapReduce和Yarn的架构

5.2.1 MapReduce过程

说明:MapReduce计算的过程可以分为两个阶段:Map阶段和Reduce阶段。其中,Map阶段输出的结果就是Reduce阶段的输入。我们可以把MapReduce简单地理解为将一堆杂乱无章的数据按照某种特征归纳起来,然后处理并得到最后的结果。

Map面对的是杂乱无章的互不相关的数据,其解析每个输出,并从中提取出key:value即数据的特征。

Reduce阶段接收Map阶段的数据,且该阶段的数据是以key后面跟着若干个value来阻组织的,这些value具有相关性,在此基础上我们可以作进一步的处理以便得到结果。


5.2.2 MapReduce工作流程

说明:通常我们将一个文件中的数据分为若干个切片(Split),有多少个Split就会有多少个Map任务,Map任务和Reduce任务之间存在洗牌(Shuffle),他们将Map分好的key:value整理有序并分区,然后传递给Reduce任务,通过Reduce任务输出最终结果。

image-20220902133505556


5.2.3 Map阶段详解

说明:我们将一个传递给MapReduce处理的文件数据成为Job。Job提交前,先将待处理的文件进行分片,MR框架默认将一个块作为一个分片,客户端应用可以重定义块和分片的映射关系。

Map阶段先把数据放入一个环形内容缓冲区,缓冲区的数据溢出即可进入后续处理阶段,我们将这个过程称为溢写;溢写的比例一般是80%左右,当达到溢写比例时,需要将缓冲区的数据全部写入本地磁盘。

溢写后并不是直接将数据写入本地磁盘,这是需要经过Map Phase(Map Shuffle)过程,这实际上是一个冗长的过程,其中细化可以分为分区排序合并归并

image-20220902133858516


5.2.4 Reduce阶段详解

说明:通过Map阶段输出的数据文件我们称为MOF(MapOutFile)。MOF文件经过排序处理。当Reduce Task接收的数据量不大时,则直接存放内存缓冲区中,随着缓冲区文件的增多,MR后台线程将它们合并成一个更大的有序文件,这个动作时Reduce阶段的Merge操作,过程中会产生许多中间文件,最后一次合并的结果直接输出到用户自定义的reduce函数。

当数据很少时,我们在Map阶段可能不会达到溢写比例。这时候数据会在缓存中归并,然后输出给Reduce。


5.2.5 Shuffle过程详解

说明:Map阶段和Reduce阶段之间传递中间数据的过程成为Shuffle。这在前面学习过程中已经提及。这个过程包括ReduceTask从各个MapTask获取MOF我呢间的过程,以及对MOF的培训和合并处理。

过程详解:从输入开始即为Map任务的启动;将Job任务提交给Map,Map会将一整个任务分为许多个键值对,此后将这些键值对数据传入环形缓存区中,溢写的数据进入MapShuffle过程;在这个过程中,我们将键值对进行整理,主要的整理过程为分区、排序和合并。集中合并不是必须的,合并过程我们可以举例:如<”a”,1>,<”a”,1>变为<”a”,2>的过程;通过归并可以将数据分区;进行分区后的数据经由reduce取走,在reduce端再次做一次归并,然后合并为一个文件进行输出。

image-20220902135718421


5.2.6 Yarn组件架构

说明:以下是MR1.0的架构图,在当时,主要工作都是由JobTracker负责,造成任务繁多。

image-20220906094238976


说明:在MR2.0后,Yarn分离了出来,并且使用ResourceManager分担了JobTracker的部分工作,而任务调度主要则交由ApplicationMaster来承担。

image-20220906094355212


5.2.7 MR on Yarn任务调度流程

过程

  1. Client将应用程序和ApplicationsManager提交给ResourceManager
  2. ResourceManager接收到任务之后对其进行资源分配
  3. ResourceManager利用ApplicationsManager进行资源调度
  4. ApplicationsManager试图询问每一个Node上面的NodeManager哪个资源较丰富,在资源较丰富的Node上新建一个MRAppMstr容器
  5. MRAppMstr容器建立好后需向ResourceManager提交注册请求,注册成功后后面只需向其汇报工作状态即可
  6. 当执行MR请求时,ResourceScheduler会给MRAppMstr分配执行Job所需的资源,得到反馈后,MRAppMstr在所有Node上启动相应的任务,而这些任务都是装在每个Node的容器中,任务有些事MapTask,有些是ReduceTask
  7. 每个Node在任务执行过程中,都会一直向ResourceManager汇报状态,一旦任务完成,ResourceManager就会回收所有的资源,并注销MRAppMstr容器

image-20220906092344248


5.2.8 Yarn HA方案

说明:在上面的执行过程中,我们可以看到实际上yarn中的ResourceManager负责整个集群的资源调度和任务调度;为了解决单点故障问题,Yarn高可用性方案采用了引入冗余的ResourceManager节点的方式。Zookeeper时刻通过心跳机制监听ResourceManager的状态,一旦出现故障,则启动第二ResourceManager。

image-20220906093756835


5.3 Yarn的资源管理和任务调度

5.3.1 资源管理

说明

  • 每个NodeManager可分配的内存和CPU的数量可以通过在Yarn服务配置页面配置选项设置
  • 在Hadoop3.x版本中,yarn资源模型已被推广为支持用户自定义的可数资源类型,而不是仅仅支持CPU和内存;常见的可数资源类型,除了CPU和Memory以外,还包括GPU资源,软件licenses或本地附加存储器之类的资源,但不包括端口和标签。


5.3.2 Yarn的三种资源调度器

说明:在Yarn中,负责给应用分配资源的叫做Scheduler(调度器)。根据不同的策略,yarn为我们提供了三种调度器:

  • FIFO Scheduler:利用队列执行先进先出策略
  • Capacity Scheduler:允许多个组织共享整个集群,每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,通过设置多个队列的方式给多个组织提供服务;除此之外,队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源了。在一个队列内部,资源的调度采用的同样式FIFO策略
  • FairScheduler:公平调度策略


5.3.3 容量调度器

说明:容量调度器使得Hadoop应用能够共享的,多用户的,操作简便的运行在集群上,同时最大化集群的吞吐量和利用率。

容量调度器以队列为单位划分资源,么给队列都有资源使用的下限和上限。每个用户可以设定资源使用上限。管理员可以约束单个队列、用户或作业的资源使用。支持作业优先级,但不支持抢占。

在Hadoop3.x中,OrgQueue扩展了容量调度器,通过REST API提供了编程的方式来改变队列的配置,这样,管理员可以在队列的adminster-queueACL中自动进行队列的配置管理。

5.3.4 资源分配模型

说明:调度器维护一群队列的信息;用户可以向一个或多个队列提交应用。

每个NodeManager心跳的时候,调度器根据一定的规则选择一个队列,再在这个队列上选择一个应用,尝试在这个应用上进行分配资源。

调度器会优先匹配本地资源的申请请求,其次是同机架的,最后是任意机器的。

image-20220906100130382


5.4 华为对Yarn的增强特性

5.4.1 Yarn动态内存管理

说明:华为大数据对Yarn提供了动态内存容器技术。前面我们提到过,所有的任务都是运行在各个Node的容器中,在传统的Hadoop平台中,我们的容器是固定大小的,一旦任务所需的内存超过了容器的内存设置大小,那么任务会执行失败;而在华为的大数据方案中,在运行容器的同时会同时计算容器的内存使用,如果任务的大小超过了容器的内存阈值,则会向NodeManager请求扩容容器;在任务内存大小不超过NodeManager设定的阈值范围内对容器进行扩容时允许的,若超过了阈值则终止任务。


5.4.2 Yarn基于标签调度

说明:我们可以对不同的应用打上不同的标签。对于常规资源需求的应用,我们通过打标签的方式可以将其固定分配给普通性能的机器,而把高内存需求的应用分配给高内存机器。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一幅长文细学华为MRS大数据开发(二)—— HDFS分布式文件系统和ZooKeeper
本文主要讲述了分布式文件系统HDFS和集群管理员Zookeeper的概念
77 0
【大数据计算】(三) MapReduce的安装和基础编程
目录 1.词频统计任务要求 1.1 MapReduce程序编写方法 1.1.1 编写Map处理逻辑 1.1.2 编写Reduce处理逻辑 1.1.3 编写main方法 2 完整的词频统计程序 3. 编译打包程序 3.1 使用命令行编译打包词频统计程序 3.2 使用IDEA编译打包词频统计程序 4. 运行程序 5. 编程题 5.1 根据附件的数据文件flow_data.dat , 编程完成下面需求: 5.2 附加题(选做) 6. 福利送书 最后
129 0
大数据||MapReduce的shuffle
mapreduce的数据处理过程中,shuffle出于map和Reduce之间。 Shuffle:洗牌或弄乱。 Collections.shuffle(List):随机地打乱参数list里的元素顺序。
1008 0
E-MapReduce大数据平台
1. 产品介绍 E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、Kafka、Storm,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。
1339 0
E-MapReduce大数据安全实践
E-MapReduce从EMR-2.7.x/EMR-3.5.x版本开始支持创建安全类型的集群,即集群中的开源组件以Kerberos的安全模式启动,在这种安全环境下只有经过认证的客户端(Client)才能访问集群的服务(Service,如HDFS)。
6224 0
基于大数据开发套件定时调度带资源文件的MapReduce作业
1、介绍如何使用DataIDE周期性调度MaxCompute MapReduce作业 2、如何编写带资源文件的MapReduce代码
4043 0
+关注
ArimaMisaki
一个认真并且每天保持学习的开荒者
文章
问答
文章排行榜
最热
最新
相关电子书
更多
朱翥、贺小令|更快更稳更易用:Flink 自适应批处理能力演
立即下载
Quanta:Quora的HBase分层计数系统
立即下载
八年磨一剑 重新定义HBase
立即下载