一幅长文细学华为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
|
2月前
|
存储 分布式计算 资源调度
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
76 5
|
2月前
|
资源调度 数据可视化 大数据
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
36 4
|
2月前
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
160 5
|
2月前
|
XML 资源调度 网络协议
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
107 4
|
2月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
81 4
|
2月前
|
资源调度 分布式计算 大数据
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
102 0
|
4月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
265 0
|
3月前
|
SQL 分布式计算 大数据
代码编码原则和规范大数据开发
此文档详细规定了SQL代码的编写规范,包括代码的清晰度,执行效率,以及注释的必要性。它强调所有SQL关键字需统一使用大写或小写,并禁止使用select *操作。此外,还规定了代码头部的信息模板,字段排列方式,INSERT, SELECT子句的格式,运算符的使用,CASE语句编写规则,查询嵌套规范,表别名定义,以及SQL注释的添加方法。这些规则有助于提升代码的可读性和可维护性。
51 0
|
3月前
|
SQL 分布式计算 大数据
大数据开发SQL代码编码原则和规范
这段SQL编码原则强调代码的功能完整性、清晰度、执行效率及可读性,通过统一关键词大小写、缩进量以及禁止使用模糊操作如select *等手段提升代码质量。此外,SQL编码规范还详细规定了代码头部信息、字段与子句排列、运算符前后间隔、CASE语句编写、查询嵌套、表别名定义以及SQL注释的具体要求,确保代码的一致性和维护性。
100 0