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

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 本文中主要讲述大数据领域中最著名的批处理和离线处理计算框架——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基于标签调度

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

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
2月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
68 2
|
4月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之如何开发ODPS Spark任务
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
3月前
|
SQL 分布式计算 大数据
代码编码原则和规范大数据开发
此文档详细规定了SQL代码的编写规范,包括代码的清晰度,执行效率,以及注释的必要性。它强调所有SQL关键字需统一使用大写或小写,并禁止使用select *操作。此外,还规定了代码头部的信息模板,字段排列方式,INSERT, SELECT子句的格式,运算符的使用,CASE语句编写规则,查询嵌套规范,表别名定义,以及SQL注释的添加方法。这些规则有助于提升代码的可读性和可维护性。
51 0
|
3月前
|
SQL 分布式计算 大数据
大数据开发SQL代码编码原则和规范
这段SQL编码原则强调代码的功能完整性、清晰度、执行效率及可读性,通过统一关键词大小写、缩进量以及禁止使用模糊操作如select *等手段提升代码质量。此外,SQL编码规范还详细规定了代码头部信息、字段与子句排列、运算符前后间隔、CASE语句编写、查询嵌套、表别名定义以及SQL注释的具体要求,确保代码的一致性和维护性。
100 0
|
3月前
|
分布式计算 资源调度 Hadoop
在YARN集群上运行部署MapReduce分布式计算框架
主要介绍了如何在YARN集群上配置和运行MapReduce分布式计算框架,包括准备数据、运行MapReduce任务、查看任务日志,并启动HistoryServer服务以便于日志查看。
67 0
|
4月前
|
分布式计算 大数据 Hadoop
MapReduce:大数据处理的基石
【8月更文挑战第31天】
127 0
|
4月前
|
机器学习/深度学习 分布式计算 算法
MaxCompute 的 MapReduce 与机器学习
【8月更文第31天】随着大数据时代的到来,如何有效地处理和分析海量数据成为了一个重要的课题。MapReduce 是一种编程模型,用于处理和生成大型数据集,其核心思想是将计算任务分解为可以并行处理的小任务。阿里云的 MaxCompute 是一个面向离线数据仓库的计算服务,提供了 MapReduce 接口来处理大规模数据集。本文将探讨如何利用 MaxCompute 的 MapReduce 功能来执行复杂的计算任务,特别是应用于机器学习场景。
84 0
|
4月前
|
数据可视化
Echarts数据可视化开发| 智慧数据平台
Echarts数据可视化开发| 智慧数据平台
|
4月前
|
数据可视化
Echarts数据可视化大屏开发| 大数据分析平台
Echarts数据可视化大屏开发| 大数据分析平台
|
4月前
|
存储 分布式计算 算法
"揭秘!MapReduce如何玩转压缩文件,让大数据处理秒变‘瘦身达人’,效率飙升,存储不再是烦恼!"
【8月更文挑战第17天】MapReduce作为Hadoop的核心组件,在处理大规模数据集时展现出卓越效能。通过压缩技术减少I/O操作和网络传输的数据量,不仅提升数据处理速度,还节省存储空间。支持Gzip等多种压缩算法,可根据需求选择。示例代码展示了如何配置Map输出压缩,并使用GzipCodec进行压缩。尽管压缩带来CPU负担,但在多数情况下收益大于成本,特别是Hadoop能够自动处理压缩文件,简化开发流程。
66 0