第三章 MapReduce与Yarn

第三章 MapReduce与Yarn

本章讲述大数据领域最著名的批处理与离线处理框架 MapReduce,包括原理,流程,使用场景;

以及Hadoop集群中用于统一资源管理调度的组件 Yarn,包括定义,功能,与架构,HA方案和容错机制,以及利用Yarn进行资源调配的常见方法。

1. MapReduce与Yarn基本介绍

1.1 MapReduce概述

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

高度抽象的编程思想程序员只需描述做什么,具体执行由框架完成
良好的拓展性可添加节点拓展集群能力
高容错性某些节点发生故障时,可通过计算迁移,数据迁移在其他节点完成任务,等策略提高集群可用性和容错性

MapReduce是

  • 一个基于集群的高性能计算平台
  • 一个并行计算和运行软件框架
  • 一个并行程序设计模型和方法

1.2 Hadoop资源调度与分配

随着大数据的发展,更加多样性的分布式编程范式应运而生,比如实时数据处理,内存计算,图计算等等。

编程范式的多样化对运行时环境提出了更大的挑战,即运行时环境需要更通用,支持不同的编程模型。

不同的编程范式,或者说不同的计算任务,对资源(CPU,内存)的需求是不同的,因此需要优秀的调度策略,在满足应用的特殊需求情况下,最大化利用资源,同时做好任务之间的隔离,避免互相影响。

1.3 Yarn概述

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

2. MapReduce功能与架构

2.1 MapReduce过程

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

  • Map面对的是杂乱的互不相关的数据,它解析每个数据,从中提出key和value,也就是提取数据特征
  • 到了Reduce阶段,数据是以key后面跟着若干个value来组织的,这些value有相关性。在此基础上,我们做进一步的处理以便得到结果

在这里插入图片描述

  • 不同的Map任务之间不会通信
  • 不同的Reduce任务之间也不会进行信息交换
  • 用户不能显式地从一台机器向另一台机器发送消息
  • 所有的数据交换都是通过MapReduce框架自身去实现的
2.1.1 Map阶段详解
  • Job提交前,先将待处理的文件进行分片(Split),MR框架默认将一个块(Block)作为一个分片。客户端应用可以重新定义块与分片的映射关系。

  • Map阶段先把数据放入一个环形内存缓冲区,当缓冲区数据达到80%左右发生溢出(Spill),需将缓冲区数写入本地磁盘
    在这里插入图片描述
    写入本地磁盘前需要做如下处理:

  • 分区(Partition)
    默认采用Hash算法进行分区,MR根据Reduce Task的个数来确定分区个数,相同Key值的记录被送入同一Reduce Task进行处理

  • 排序(Sort)
    将Map输出的记录排序,例如将例如将(‘Hi’,’1’),(‘Hello’,’1’)重新排序为(‘Hello’,’1’), (’Hi’,’1’)。

  • 组合(Combine)
    这个动作MR框架是可选的,例如将(’Hi’,’1’),(’Hi’,’1’),(‘Hello’,’1’), (Hello’,’1’)进行合并操作为 (’Hi’,’2’), (‘Hello’,’2’)。

  • 合并(Spill)
    MapTask会产生很多的溢出文件(spill file),这时需要将多个溢出文件进行合并处理,生成一个经过分区和排序的Spill File(MOF:MapOutFile)。为节省空间,可以对MOF进行压缩后写入

合并(Combine)和归并(Merge)的区别:

两个键值对<“a”,1>和<“a”,2>,如果合并,会得到<“a”,3>,如果归并,会得到<“a”,<1,2>>

2.1.2 Reduce阶段详解

前面提到的MOF文件是经过排序处理的。

  • 当Reduce Task数据量不大时,则直接存放在内存缓冲区中,随着缓冲区文件的增多,MR后台线程将它们合并成一个更大的有序文件,这个动作是Reduce阶段的Merge操作,过程中会产生很多中间文件,最后一次合并的结果直接输出到用户自定义的reduce函数
  • 当数据很少时,不需要溢写到磁盘,直接在缓存中Merge,然后输出给Reduce
    在这里插入图片描述
2.1.3 Shuffle过程详解

Shuffle的定义:Map阶段和Reduce阶段之间传递中间数据的过程,包括Reduce Task从各个Map Task获取MOF文件的过程,以及对MOF的排序和合并处理
在这里插入图片描述

  • 每个Map任务分配一个缓存,默认100MB,设置溢写比例0.8,排序是默认的操作,Combine可选
  • 在Map任务结束之前进行归并,得到一个大的文件,放在本地磁盘
  • 文件归并时,如果溢写文件数量大于预定值(默认是3)则可以再次启动Combiner,少于3则不需要
  • JobTracker会一直监测Map任务的执行,并通知Reduce任务来领取数据
  • Reduce任务通过RPC向JobTracker询问进度,Map是否完成
  • Reduce领取数据先放入缓存,先归并,再合并,写入磁盘
  • 多个溢写文件归并成一个或多个大文件,文件的键值对是排序的
2.1.4 典型案例WORDCOUNT

假设要分析一个大文件A里每个英文单词出现的个数,利用MapReduce框架能快速实现。
在这里插入图片描述

  • 待处理的大文件A已经存放在HDFS上,大文件被切分的数据块A.1,A.2,A.3分别存放在DataNode #1,#2,#3上
  • WordCount分析处理程序实现了用户自定义的Map函数和Reduce函数。WordCount将分析应用交给RM,RM根据请求创建相应的Job,并根据文件个数按文件块分片,创建3个Map Task和Reduce Task,这些Task运行在Container中
  • Map Task的输出是一个经分区和排序的MOF文件,记录形如表所示
  • Reduce Task从Map Task获取MOF文件,经过合并,排序,最后根据用户自定义的Reduce逻辑,输出统计结果

WordCount程序功能
在这里插入图片描述
WordCount的Map过程
在这里插入图片描述
WordCount的Reduce过程
在这里插入图片描述

3. Yarn功能与架构

3.1 Yarn的组件架构

在这里插入图片描述

  • 首先Client提交任务,ResourceManager接受任务,然后启动并监控起来的第一个Container,也就是APP Mstr
  • APP Mstr通知NodeManager管理资源并启动其他Container
  • 任务最终运行在Container中

3.2 MapReduce on Yarn

在这里插入图片描述

  1. 用户向Yarn提交应用程序,包括APP Mstr程序,启动APP Mstr的命令,用户程序等
  2. ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的APP Mstr
  3. APP Mstr首先向ResourceManage注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束
  4. APP Mstr采用轮训的方式通过RPC协议向ResourceManager申请和领取资源
  5. 一旦APP Mstr申请到资源后,便与对应的NodeManager通信,要求它启动任务
  6. NodeManager为任务设置好运行环境(包括环境变量,Jar包,二进制程序等),将任务启动命令写入一个脚本中,并通过运行该脚本启动任务
  7. 各个任务通过某个RPC协议向APP Mstr汇报自己的状态和进度,以让APP Mstr随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务
  8. 应用程序运行完成后,APP Mstr向ResourceManager注销并关闭自己

3.3 Yarn HA方案

ResourceManager冗余方案,解决单点故障
在这里插入图片描述

  • 开启自动故障转移后, ResourceManager会通过内置的基于ZooKeeper实现的ActiveStandbyElector来决定哪一个ResouceManager应该成为Active节点。当Active状态的ResourceManager发生故障时,另一个ResourceManager将自动被选举为Active状态以接替故障节点。
  • 当集群的ResourceManager以HA方式部署时,客户端使用的“yarn-site.xml”需要配置所有ResourceManager地址。客户端(包括ApplicationMaster和NodeManager)会以轮询的方式寻找Active状态的ResourceManager。如果当前Active状态的ResourceManager无法连接,那么会继续使用轮询的方式找到新的ResourceManager。

3.3 Yarn HA容错机制

在这里插入图片描述

  • 在YARN中, ApplicationMaster(AM)与其他Container类似也运行在NodeManager上(忽略未管理的AM)。 AM可能会由于多种原因崩溃、退出或关闭。如果AM停止运行,ResourceManager(RM)会关闭ApplicationAttempt中管理的所有Container,包括当前任
    务在NodeManager(NM)上正在运行的所有Container。 RM会在另一计算节点上启动新的ApplicationAttempt
  • 不同类型的应用希望以多种方式处理AM重新启动的事件。 MapReduce类应用目标是不丢失任务状态,但也能允许一部分的状态损失。但是对于长周期的服务而言,用户并不希望仅仅由于AM的故障而导致整个服务停止运行
  • YARN支持在新的ApplicationAttempt启动时,保留之前Container的状态,因此运行中的作业可以继续无故障的运行

3.4 Yarn 资源管理

  • yarn.nodemanager.resource.memory-mb

    表示用于当前NodeManager上可以分配给容器的物理内存的大小,单位: MB。必须小于NodeManager服务器上的实际内存大小。

  • yarn.nodemanager.vmem-pmem-ratio

    表示为容器设置内存限制时虚拟内存跟物理内存的比值。容器分配值使用物理内存表示的,虚拟内存使用率超过分配值的比例不允许大于当
    前这个比例。

  • yarn.nodemanager.resource.cpu-vcore

    表示可分配给container的CPU核数。建议配置为CPU核数的1.5-2倍。

3.4 Yarn 的3种资源调度器

资源调度器特点
FIFO Scheduler先进先出
Capacity Scheduler为每个组织分配专门的队列,每个队列分配一定的资源上下限,支持作业优先级,不支持抢占,队列内部用FIFO
Fair Scheduler公平的定义可以用参数来设置

容量调度器(Capacity Scheduler)资源模型
在这里插入图片描述

  • 调度器维护队列,用户可以向一个或多个队列提交应用
  • 每次NM心跳的时候,调度器根据一定规则选择队列,并在队列上选择应用,尝试在这个应用上分配资源
  • 调度器会优先匹配本地资源的申请请求,其次同机架,再次任意机器
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值