大数据基础--MapReduce和Yarn

Updated on with 0 views and 0 comments

一、简介

1.1 基本概念

1.1.1 MapReduce(MR)

MapReduce基于分而治之得思想,用于大规模数据集(大于1TB)得并行计算和离线计算,具有如下特点

  • 高度抽象的编程思想
  • 良好的扩展性 可通过添加节点扩展集群能力
  • 高容错性 通过计算迁移或数据迁移等策略提高集群的可用性与容错性

1.1.2 Yarn

Apache Hadoop Yarn(Yet Another Resource Negotiator)是一个通用的资源管理系统,可为上层应用提供统一的资源管理和调度,提高了集群资源利用率,将资源统一管理、数据共享。

image.png

1.2 资源调度与分配

hadoopp1.0中,只有HDFS和MapReduce,资源调度通过MRv1进行,存在很多缺陷:

  • master是单点,故障恢复依赖于周期性的checkpoint,不保证可靠性,发生故障时通知用户,由用户决定是否重新计算
  • 没有区分作业调度与资源调度
  • 没有处理资源隔离与安全性

Hadoop2.0引入了yarn框架,以便更好的管理集群的资源调度与分配

二、功能架构

2.1 MapReduce

2.1.1 MapReduce过程

MapReduce计算过程分为两个阶段,Map阶段和Reduce阶段,Map阶段的输出就是Reduce阶段的输入

  • Map解析数据从中提取出<key,value>,就是数据的特征
  • 到了reduce阶段,数据是由key后面跟着若干个value组成的

2.1.2 MapReduce工作流程

输入一个HDFS文件,将其分片,分片大小默认与HDFS文件分割的快大小相同,Map负责对输入的键值对进行处理并生成新的键值对,Reduce则对生成的键值对进行合并,得到最终结;

Map与Reduce过程中还有一个Shuffle过程,Shuffle过程将Map阶段输出的数据进行分区、排序、分组和聚合,Shuffle用于解决分布式种全局排序和全局分组的问题。

image.png

2.2.3 Map详细过程

  • 对待处理文件进行分片(Split)。MR默认将一个块作为一个分片,客户端可以定义块与分片的映射关系
  • 读取文件,解析为key,value的键值对(map()),然后写入到环形内存缓冲区
  • 分区:给每个kv加上分区索引,同一分区的数据,将来会被发送到同一个reduce中
  • 排序:当缓冲区数据达到80%,开始溢写文件,先按照分区进行排序,相同分区的数据汇聚到一起,然后各个分区的数据在按照key进行排序
  • 合并:对map的数据进行合并,该阶段可以跳过
  • 将环形内存缓冲区的内容溢写到本地磁盘的小文件中
  • 对本地磁盘的小文件进行归并排序

image.png

2.2.4 Reduce详细过程

  • reduce从本地磁盘中拉取自己需要处理的数据到缓存中
  • 对拉取的数据进行归并及排序操作,数据过大会先写入到磁盘文件,reduce再读取文件
  • 对归并排序好的数据调用reduce方法
  • 把输出的键值写入到HDFS文件中

数很少时,不需要进行归并后写入到磁盘的操作,直接从缓存中输出给reduce

image.png

2.2.5 shuffle详细过程

shuffle是Map阶段和Reduce阶段之间传递数据的过程,包括ReduceTask从各个MapTask获取MOF的过程,以及对MOF的排序与合并处理

image.png

2.2.5 词频统计流程示例

image.png

2.3 Yarn

2.3.1 组件架构

  • ResourceManager 资源的管理调度
  • NodeManager 监控任务的执行
  • ApplicationMaster 任务的管理调度

image.png

2.3.2 任务调度流程

  • client提交任务给ResourceManager
  • ResourceManager选择一个NodeManager,然后再这个NodeManager上启动一个容器并在容器中运行ApplicationMaster实例
  • ApplicationMaster向ResourceManager申请注册并汇报任务执行情况
  • ResourceScheduler给ApplicationMaster分配执行任务的资源
  • ApplicationManager在若干个NodeManager上询问启动任务
  • NodeManager启动Container,运行任务,有些container运行的是MapTask有些任务运行的是ReduceTask
  • 任务启动后,向ApplicationMaster汇报任务执行情况和资源使用情况
  • ApplicationMaster将任务状态信息向ResourceManager汇报

image.png

2.3.3 Yarn HA方案

HA(High Availability)方案就是高可用方案,yarn中的ResourceManager负责整个集群的资源管理和任务调度,Yarn高可用方案通过引入冗余的ResourceManager节点的方式,解决了ResourceManager单点故障问题

image.png

2.3.4 Yarm ApplicationMaster容错机制

ResourceManager接收到客户端发送的任务执行请求时,会给任务分配ApplicationMaster,ApplicationMaster负责任务的监控与调度,当他发生故障时,Yarn会自动重新分配一个节点,将正在执行的任务在新的任务迁移到新的节点上

三、Yarn的资源管理和任务调度

3.1 资源管理

NodeManager可分配的内存和CPU数量可以通过配置项设置

  • yarn.nodemanager.resource.memory-mb:可以分配给容器的物理内存大小,不能超过本节点的物理内存大小
  • yarn.nodemanager.vmen-pmen-ratio:虚拟内存与物理内存的比值
  • yarn.nodemanager.esource.cpu-vcore:可以分配给容器的CPU核数

在Hadoop3.X版本中支持用户自定义可数的资源类型,如GPU资源,软件Licenses或本地附加存储器之类的资源,但不包括端口(Ports)和标签(Labels)

3.2 资源调度器

在Yarn中负责给应用分配资源的叫做Schduler(调度器)。在Yarn中,根据不同策略,共有三种调度器可以选择

  • FIFO Scheduler:FIFO算法的资源调度器,先给队列最顶端的应用分配资源
  • Capacity Scheduler:允许多个组织共享集群,通过为每个组织分配专门的队列,然后每个队列分配一定的集群资源,通过设置多个队列的方式给多个组织提供服务,同时队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列的资源了,队列内部还是使用FIFO策略
    • 容量调度器时hadoop应用可以共享的、多用户的、操作简便的运行在集群上,同时最大化集群的吞吐量和利用率
    • 容量调度器以队列为单位划分资源,每个队列都有资源使用的上限和下限,每个用户可以设定资源使用上限,管理员可以约束某个队列、用户或作业的资源使用。支持作业优先级,但不支持资源抢占。
    • Hadoop3.x中管理员可以在队列的administer_queue ACL中自动进行队列配置管理
  • Fair Scheduler:公平分配资源

3.3 资源分配模型

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

image.png

参考

BigData-Notes/notes/Hadoop-YARN.md at master · heibaiying/BigData-Notes (github.com)

MapReduce和Yarn技术原理_在线课程_华为云开发者学堂_云计算培训-华为云 (huaweicloud.com)

Apache Hadoop 3.3.6 – Apache Hadoop YARN

Apache Hadoop 3.3.6 – MapReduce Tutorial


标题:大数据基础--MapReduce和Yarn
作者:wenyl
地址:http://www.wenyoulong.com/articles/2023/10/24/1698133435887.html