MapReduce基本定义

  • MapReduce是面向大数据并行处理的计算模型、框架、平台。
  • MapReduce是一个基于集群的高性能并行计算平台(Cluster Infrastructure)。
  • MapReduce是一个并行计算与运行软件框架(Software Framework)。
  • MapReduce是一个并行程序设计模型与方法(Programming Model & Methodology)。

MapReduce特点

MapReduce基于Google发布的MapReduce论文设计开发,用于大规模数据集(大于1TB)的并行计算,具有如下特点:

  • 易于编程:程序员仅需描述做什么,具体怎么做交由系统的执行框架处理。
  • 良好的扩展性:可通过添加节点以扩展集群能力。
  • 高容错性:通过计算迁移或数据迁移等策略提高集群的可用性与容错性。当某些节点发生故障时,可以通过计算迁移或数据迁移在其他节点继续执行任务,保证任务执行成功。

MapReduce工作流程概述

MapReduce和YARN技术原理

MapReduce逻辑过程

MapReduce和YARN技术原理
MapReduce和YARN技术原理

MapReduce角色

  • Application Master(AM)负责一个Application生命周期内的所有工作。包括:与RM调度器协商以获取资源;将得到的资源进一步分配给内部任务(资源的二次分配);与NM通信以启动/停止任务;监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
  • ResourceManager(RM) 负责集群中所有资源的统一管理和分配。它接收来自各个节点(NodeManager)的资源汇报信息,并根据收集的资源按照一定的策略分配给各个应用程序。
  • NodeManager(NM)是每个节点上的代理,它管理Hadoop集群中单个计算节点,包括与ResourceManger保持通信,监督Container的生命周期管理,监控每个Container的资源使用(内存、CPU等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliary service)。

MapReduce1.0的缺陷

MapReduce在1.0的时候还是任务执行框架,拥有两个角色。

  • JobTracker为单节点部署,当JobTracker异常,整个任务执行就都异常。资源监控、分配和作业调度均在内存中处理,当节点达到4000个任务的时候,JobTracker容易内存溢出。
  • TaskTracker划分资源的时候map task和reduce task划分的内存是一样的,造成资源浪费。执行任务的时候不做资源判断,假设同时运行多个cpu和内存需求比较大的任务时,内存会容易溢出。
    MapReduce和YARN技术原理

MapReduce扩展

  • 分片的必要性:MR框架将一个分片和一个Map Tast对应,即一个Map Task只负责处理一个数据分片。数据分片的数量确定了为这个Job创建Map Task的个数。
  • 一个分片map进行运算,默认本地需要准备100m内存,当内存使用达到0.8的时候,结果要写入磁盘,同时对结果进行分区。分区是按map的key值的hash结果,和reduce数量进行取模,结果得到具体的key结果要去到哪个分区。
  • MR组件在FI中只有jobhistoryserver实例,它只是存储任务的执行记录,执行列表,没有它,也可以运行任务。但是无法查询任务的详细信息。
  • MapReduce使用高度抽象函数(Map Reduce)将数据集进行切分(逻辑切分),数据集必须是键值对。
  • Reduce阶段的三个过程:
    • Copy:Reduce Task从各个Map Task拷贝MOF文件。
    • Sort:通常又叫Merge,将多个MOF文件进行合并再排序。
    • Reduce:用户自定义的Reduce逻辑。
  • 核心:计算向数据靠拢,减少数据的网络传输

YARN概述

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

YARN任务调度流程

MapReduce和YARN技术原理

  1. 客户端向yarn发起提供一个应用程序的请求。Yarn里面的ResourceManager接受到请求后会启动一个调度器(ResourceScheduler)。
  2. 调度器为应用找到一个合适的节点,在节点里面的NodeManager拉起一个容器(container),并在这个容器里面为程序启动一个Application Master。
  3. Application Master启动完之后,会向ResourceManager里面的Application Manager进行注册,之后用户可以在ResourceManager查到Application Master对应的运行状态.
  4. Application Master启动完之后,会向ResourceManager里面的Application Manager进行注册,之后用户可以在ResourceManager查到Application Master对应的运行状态。
  5. Application Master注册完之后,Application Master会根据用户提交过来的作业进行判断,确认需要多少资源,并向ResourceScheduler申请。
  6. 当Application Master判断作业运行所需资源较小,可以直接在本地运行,则向本地的NodeManager通信。让NodeManager启动一个容器(container),在容器里面启动一个task。Task启动后会在本地的Application Master进行注册,并向Application Master汇报task的执行情况。
  7. 当Application Master判断作业运行所需资源较大,向ResourceScheduler申请,获得对应的新节点,通过Application Master启动新节点的NodeManager。新的NodeManager会启动新的container,在新的container里执行task任务。Task任务启动完后会向Application Master注册。
  8. 当所有的task执行完成后,Application Master会向Application Manager注销所有的容器,关闭所有的连接。

MapReduce On YARN任务调度流程

MapReduce和YARN技术原理

  1. mapreduce先运行job,对作业进行初始化
  2. Job向ResourceManager发起执行作业的申请
  3. 当有足够的运行资源的时候,把代码相关文件上传到共享文件系统中
  4. Job向yarn发起提供一个应用程序的请求。Yarn里面的ResourceManager接受到请求后会启动一个调度器(ResourceScheduler)。
  5. 调度器为应用找到一个合适的节点,在节点里面的NodeManager拉起一个容器(container),并在这个容器里面为程序启动一个Application Master。
  6. Application Master注册完之后,会接受来自共享文件系统的计算的分片,为每个分片创建map对象和reduce对象。
  7. Application Master会根据用户提交过来的作业进行判断,确认需要多少资源,并向ResourceScheduler申请。
  8. 当Application Master判断作业运行所需资源较小,可以直接在本地运行,则向本地的NodeManager通信。让NodeManager去共享文件系统中把任务所需资源本地化。本地化之后,NodeManager启动一个容器(container),在容器里面启动一个map或者reduce。map或者reduce启动后会在本地的Application Master进行注册,并向Application Master汇报task的执行情况。
  9. 当Application Master判断作业运行所需资源较大,向ResourceScheduler申请,获得对应的新节点,通过Application Master启动新节点的NodeManager。新的NodeManager会启动新的container,在新的container里执行map或者reduce任务。map或者reduce任务启动完后会向Application Master注册。
  10. 当所有的map或者reduce执行完成后,Application Master会向Application Manager注销所有的容器,关闭所有的连接。

YARN 的高可靠性

MapReduce和YARN技术原理

  1. ResourceManager的高可用性方案是通过设置一组Active/Standby的ResourceManager节点来实现的。任何时间点上都只能有一个ResourceManager处于Active状态。当Active状态的ResourceManager发生故障时,可通过自动或手动的方式触发故障转移,进行Active/Standby状态切换。
  2. 备RM升主后,能够恢复故障发生时上层应用运行的状态。当启用ResourceManager Restart时,重启后的ResourceManager就可以通过加载之前Active的ResourceManager的状态信息,并通过接收所有NodeManager上container的状态信息重构运行状态继续执行。这样应用程序通过定期执行检查点操作保存当前状态信息,就可以避免工作内容的丢失。状态信息需要让Active/Standby的ResourceManager都能访问。

YARN 容错机制

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

相关文章: