MapReduce分布式离线批处理和YARN资源协调处理

目录

1.MapReduce和YARN基本介绍

2.MapReduce和YARN功能与架构

MapReduce的功能

YARN的组件架构

MapReduce On YARN任务调度流程

YARN HA方案

YARN APPMaster容错机制

3.YARN的资源管理和任务调度

资源管理

资源分配模型

容量调度器(Capacity Scheduler )

容量调度器的特点:

容量调度器的任务选择:

队列资源限制:

用户限制:

任务限制:

4.增强特性

YARN动态内存管理

YARN基于标签调度


1.MapReduce和YARN基本介绍

MapReduce基于Google发布的MapReduce论文设计开发,用于大规模数据卷(大于1TB)的并行计算。

MapReduce的特点:

  • 易于编程:程序员仅需描述做什么,具体怎么做交由系统的执行框架处理。
  • 良好的扩展性:可通过添加节点以扩展集群能力。
  • 高容错性:通过计算迁移或者数据迁移策略提高集群的可行性与容错性。尽量移动计算而不是移动数据,由于数据太过于庞大,所以一般由于数据一般过于庞大。

当某些节点发生故障时,可以通过计算迁移或数据迁移在其他节点继续执行任务,保证任务执行成功。

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

 

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

 

2.MapReduce和YARN功能与架构

分片的必要性:MR框架将一个分片和一个Map Tast对应,即一个Map Task只负责处理一个数据分片。数据分片的数量确定了为这个Job创建Map Task的个数。

Application Master(AM)负责一个Application生命周期内的所有工作。包括:与RM调度器协商以获取资源;将得到的资源进一步分配给内部任务(资源的二次分配);与NM通信以启动/停止任务;监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。

ResourceManager(RM) 负责集群中所有资源的统一管理和分配。它接收来自各个节点(NodeManager)的资源汇报信息,并根据收集的资源按照一定的策略分配给各个应用程序。

NodeManagerNM)是每个节点上的代理,它管理Hadoop集群中单个计算节点,包括与ResourceManger保持通信,监督Container的生命周期管理,监控每个Container的资源使用(内存、CPU等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliary service)。

 

MR组件在FI中只有jobhistoryserver实例,它只是存储任务的执行记录,执行列表,没有它,也可以运行任务。但是无法查询任务的详细信息。

Reduce阶段的三个过程:

CopyReduce Task从各个Map Task拷贝MOF文件。

Sort:通常又叫Merge,将多个MOF文件进行合并再排序。

Reduce:用户自定义的Reduce逻辑。

 

MapReduce的功能

假设要分析一个大文件里每个人英文单词出现的个数,利用MapReduce框架能快熟实现这一统计分析。

大文件分块存储在HDFS上。

WordCount分析处理程序实现了用户自定义的Map函数和Reduce函数。WordCount将分析应用提交给RMRM根据请求创建对应的Job,并根据文件块个数按文件块分片,创建3MapTask 3Reduce Task,这些Task运行在Container中。

Map Task 123的输出是一个经分区与排序(假设没做Combine)的MOF文件,记录形如表所示。

Reduce TaskMap Task获取MOF文件,经过合并、排序,最后根据用户自定义的Reduce逻辑,输出如表所示的统计结果。

 

 

 

YARN的组件架构

首先client提交任务,ResourceManager接收到任务,然后启动并监控起来的第一个Container,也就是App Mstr

App Mstr通知nodemanager管理资源并启动其他container

任务最终是运行在Container当中。

 

 

ResourceManager 负责集群资源统一管理和计算框架管理,主要包括调度与应用程序管理。

调度器:根据容量、队列等限制条件,将系统中的资源分配给各个正在运行的应用程序。

应用程序管理器:负责管理整个系统中的所有应用程序,包括应用程序提交,与调度器协商资源,启动并监控AppMaster运行状态。

NodeManager节点资源管理监控和容器管理,RM是系统中将资源分配给各个应用的最终决策者

AppMaster各种计算框架的实现(例如MRAppMaster)向ResourceManager申请资源,通知NodeManager管理相应的资源

Container YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU等。

 

MapReduce On YARN任务调度流程

步骤1:用户向YARN 中提交应用程序, 其中包括ApplicationMaster 程序、启动ApplicationMaster 的命令、用户程序等。

步骤2ResourceManager 为该应用程序分配第一个Container, 并与对应的NodeManager 通信,要求它在这个Container 中启动应用程序的ApplicationMaster

步骤3ApplicationMaster 首先向ResourceManager 注册, 这样用户可以直接通过ResourceManage 查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7

步骤4ApplicationMaster 采用轮询的方式通过RPC 协议向ResourceManager 申请和领取资源。

步骤5:一旦ApplicationMaster 申请到资源后,便与对应的NodeManager 通信,要求它启动任务。

步骤6NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

步骤7:各个任务通过某个RPC 协议向ApplicationMaster 汇报自己的状态和进度,以让ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC ApplicationMaster 查询应用程序的当前运行状态。

步骤8 应用程序运行完成后,ApplicationMaster ResourceManager 注销并关闭自己。

 

YARN HA方案

YARN中ResourceManager负责整个集群的资源和任务调度,YARN敢可用性方案通过映入冗余的ResourceManager节点的方式,解决了ResourceManager单点故障问题。

RM升主后,能够恢复故障发生时上层应用运行的状态。当启用ResourceManager Restart时,重启后的ResourceManager就可以通过加载之前ActiveResourceManager的状态信息,并通过接收所有NodeManagercontainer的状态信息重构运行状态继续执行。这样应用程序通过定期执行检查点操作保存当前状态信息,就可以避免工作内容的丢失。状态信息需要让Active/StandbyResourceManager都能访问。当前系统提供了三种共享状态信息的方法:通过文件系统共享(FileSystemRMStateStore)、通过LevelDB数据库共享(LeveldbRMStateStore)或通过ZooKeeper共享(ZKRMStateStore)。这三种方式中只有ZooKeeper共享支持Fencing机制。Hadoop默认使用ZooKeeper共享。

YARN APPMaster容错机制

 

YARN中,ApplicationMaster(AM)与其他Container类似也运行在NodeManager上(忽略未管理的AM)(如手写描述的上一张图中)。AM可能会由于多种原因崩溃、退出或关闭。如果AM停止运行,ResourceManager(RM)会关闭ApplicationAttempt中管理的所有Container,包括当前任务在NodeManager(NM)上正在运行的所有ContainerRM会在另一计算节点上启动新的ApplicationAttempt

不同类型的应用希望以多种方式处理AM重新启动的事件。MapReduce类应用目标是不丢失任务状态,但也能允许一部分的状态损失。但是对于长周期的服务而言,用户并不希望仅仅由于AM的故障而导致整个服务停止运行。

YARN支持在新的ApplicationAttempt启动时,保留之前Container的状态,因此运行中的作业可以继续无故障的运行

 

 

3.YARN的资源管理和任务调度

 

资源管理

当前YARN支持内存和CPU两种资源类型的管理和分配。每个NodeManager可分配内存和CPU的数量可以通过配置选项设置(可以在YARN服务配置页面配置)

 

Yarn.nodemanager.resource.memory-mb   该节点上YARN可使用的物理内存总量

Yarn.nodemanager.vmem-pmem-ratio 任务每使用1MB物理内存,最多可使用虚拟内存量,默认是2.1。

Yarn.nodemanager.pmem-check-enabled  是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true。

Yarn.nodemanager.resource.cpu-vcore  表示该节点上YARN可使用的虚拟CPU个数,默认是8,注意,目前推荐将该值设值为与物理CPU核数数目相同。如果你的节点CPU核数不够8个,则需要调减小这个值,而YARN不会智能的探测节点的物理CPU总数。

 

资源分配模型

容量调度器(Capacity Scheduler )

以队列为单位划分资源,每个队列都有资源使用的上限和下限。每个用户可以设定使用上限(上面Yarn命令)。管理员可以约束单个队列、用户或作业的资源使用。支持作业优先级,但是不支持资源抢占。是的Hadoop应用能够共享的、多用户的、操作简便的运用在集群上,同事最大化句群的吞吐量和利用率。

 

容量调度器的特点:

  • 容量保证管理员可为每个队列设置资源最低保证和资源使用上限,所有提交到该队列的应用程序共享这些资源。
  • 灵活性如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,当该队列有新的应用程序提交,则其他队列释放的资源会归还给该队列。
  • 支持优先级:队列支持任务优先级调度(默认是FIFO
  • 多重租赁支持多用户共享集群和多应用程序同时运行。为防止单个应用程序、用户或者队列独占集群资源,管理员可为之增加多重约束。
  • 动态更新配置文件管理员可根据需要动态修改配置参数,以实现在线集群管理。

 

 

容量调度器的任务选择:

  • 调度时,首先按以下策略选择一个合适队列:

资源利用量最低的队列优先,比如同级的两个队列Q1Q2,它们的容量均为30,而Q1已使用10Q2已使用12,则会优先将资源分配给Q1

最小队列层级优先,例如:QueueAQueueB.childQueueB,则QueueA优先。

资源回收请求队列优先。

  •  然后按以下策略选择该队列中一个任务:

按照任务优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制。

 

 

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

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

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

当任务提交上来,首先会声明提交到哪个队列上,调度器会分配队列,如果没有指定则任务运行在默认队列。

队列是封装了集群资源容量的资源集合,占用集群的百分比例资源。

队列分为父队列,子队列,任务最终是运行在子队列上的。父队列可以有多个子队列。

调度器选择队列上的应用,然后根据一些算法给应用分配资源。

 

队列资源限制:

  1. 由于存在资源共享,因此一个队列使用的资源可能超过其容量(例如QueueA.capacity),而最大资源使用量可通过参数限制。
  2. 如果某个队列任务较少,可将剩余资源共享给其他队列,例如QueueAmaximum-capacity配置为100,假设当前只有QueueA在运行任务,理论上QueueA可以占用整个集群100%的资源。

用户限制:

任务限制:

  • 最大活跃任务数:

整个集群中允许的最大活跃任务数,包括运行或挂起状态的所有任务,当提交的任务申请数据达到限制以后,新提交的任务将会被拒绝。默认值10000

  • 每个队列最大任务数:

对于每个队列,可以提交的最大任务数,以QueueA为例,可以在队列配置页面配置,默认是1000,即此队列允许最多1000个活跃任务。

  • 每个用户可以提交的最大任务数:

这个数值依赖每个队列最大任务数。根据上面的数据, QueueA最多可以提交1000个任务,那么对于每个用户而言,可以向QueueA提交的最大任务数为1000* 用户最低资源保障率(假设25%)* 用户可使用队列资源的倍数(假设1)

 

 

4.增强特性

 

YARN动态内存管理

动态内存管理可用来优化NodeManagerContainers的内存利用率。任务在运行过程中可能产生多个Container

当前,当单个节点上的Container超过Container运行内存大小时,即使节点总的配置内存利用还很低,NodeManager也会终止这些Containers。这样就会经常使用户作业失败。

动态内存管理特性在当前是一个改进,只有当NodeManager中的所有Containers的总内存使用超过了已确定的阈值,NM总内存阈值的计算方法是Yarn.nodemanager.resource.memory-mb*1024*1024*Yarn.nodemanager.dynamic.memory.usage.threshold,单位GB,那么那些内存使用过多的Containers才会被终止。

举例,假如某些Containers的物理内存利用率超过了配置的内存阈值,但所有Containers的总内存利用率并没有超过设置的NodeManager内存阈值,那么那些内存使用过多的Containers仍可以继续运行。

 

 

YARN基于标签调度

 

在没有标签调度之前,任务提交到哪个节点上是无法控制的,会根据一些算法及条件,集群随机分配到某些节点上。而标签调度可以指定任务提交到哪些节点上。

比如之前需要消耗高内存的应用提交上来,由于运行在那些节点不可控,任务可能运行在普通性能的机器上。

Label based scheduling是一种调度策略。该策略的基本思想是:用户可以为每个nodemanager标注一个标签,比如high-memoryhigh-O等进行分类,以表明该nodemanager的特性;同时,用户可以为调度器中每个队列标注个标签,即队列与标签绑定,这样,提交到某个队列中的作业,只会使用标注有对应标签的节点上的资源,即任务实际运行在打有对应标签的节点上

将耗内存消耗型的任务提交到绑定了high-memry的标签的队列上,那么任务就可以运行在高内存机器上。

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值