0%

MapReduce与Yarn概述

  • MapReduce
    • 分而治之思想
    • 设计构思
    • 官方示例
    • 执行流程
  • YARN
    • 介绍
    • 架构组件
    • 程序提交交互流程
    • 调度器

MapReduce

分而治之思想

  • Map:第一阶段,负责”拆分”
  • Reduce:第二阶段,负责合并

设计构思

(1)如何对付大数据处理场景->分而治之

(2)构建抽象编程模型:

  • map:对一组数据元素进行某种重复式的处理
  • reduce:对Map的中间结果进行某种进一步处理的结果

(3)统一架构、隐藏底层细节

介绍

分布式计算

MapReduce:分布式计算框架

优点

  • 易于编程(提供了许多二次开发的接口)
  • 良好的扩展性(可以随节点数目增长保持近似于线性的增长)
  • 高容错性(故障转移)
  • 适合海量数据的离线处理

局限性

  • 实时计算性能差
  • 不能进行流式计算(针对静态数据集)

MapReduce实例进程

一个完整的MapReduce程序在分布式运行时有三类

  • MRAppMaster:负责整个MR程序的过程调度及状态协调
  • MapTask:负责map阶段的整个数据处理流程
  • RedeuceTask:负责reduce阶段的整个数据处理流程

阶段组成

一个MapReduce编程模型中只能包含一个Map阶段和一个Reduce阶段,或者只有Map阶段

如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序串行运行

数据类型

整个MapReduce编程中,数据都是以kv键值对的形式流转的

官方示例

示例程序路径:

1
/export/server/hadoop-3.3.0/share/hadoop/mapreduce/s

示例程序:

1
hadoop-mapreduce-examples-3.3.0.jar

MapReduce程序提交命令

1
[hadoop jar|yarn jar] hadoop-mapreduce-examples-3.3.0.jar args...

提交到哪里去?

提交到YARN集群上分布式执行

  • 评估pi的值(Monte Carlo)

    • 第一个参数:pi
    • 第二个参数:指定map阶段运行的任务task次数,并发度
    • 第三个参数:指定每个map任务取样的个数
  • WordCount概述

    • map阶段的核心:把输入的数据经过切割,全部标记为1,因此输出就是<单词,1>
    • shuffle阶段核心:经过MR程序内部自带默认的排序分组等功能,把key相同的单词会作为一个数据构成新的kv对
    • reduce阶段核心:处理shuffle完的一组数据,该组数据就是该单词所有的键值对。对所有的1进行累加求和,就是单词的总次数

    第一个参数:wordcount

    第二个参数:/input 输入路径

    第三个参数:/output输出路径(提前不存在)

执行流程

Map阶段执行过程

  • 第一阶段:输入文件逻辑切片

    默认Split size = Block size(128M),每个切片由一个MapTask处理

  • 第二阶段:对切片中的数据按照一定的规则读取解析返回kv对

    默认是按行读取数据

  • 第三阶段:调用Mapper类中的map方法处理数据

    没读取解析出来的一个kv对,调用一次map方法

  • 第四阶段:按照一定的规则对Map输出的键值对进行分区partition。默认不分区,因为只有一个reducetask。分区的数量就是reducetask运行的数量

  • 第五阶段:Map输出数据写入内存缓冲区,达到比例溢出到磁盘上。溢出spill的时候根据key进行排序sort。默认根据key字典序排序

  • 第六阶段:对所有溢出文件进行最终的merge合并,成为一个文件

Reduce阶段执行过程

  • 第一阶段:ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据
  • 第二阶段:把拉取来数据,全部进行合并merge,即把分散的数据合并一个大的数据。再对合并后的数据排序
  • 第三阶段:对排序后的键值对调用reduce方法键相等的键值对调用一次reduce方法。最后把这些输出的键值对写入到HDFS文件中

shuffle机制

shuffle:将map端的无规则输出按指定的规则”打乱”成具有一定规则的数据,以便reduce端接收处理

一般把从Map产生输出开始Reduce取得数据作为输入之前的过程称作shuffle

YARN

YARN(Yet Anoter Resource Negotaitar) 另一种资源协调者

一个通用资源管理系统调度平台

  • 资源管理系统:集群的硬件资源,和程序运行相关,比如内存、CPU等
  • 调度平台:多个程序同时申请资源如何分配,调度算法
  • 通用:不仅支持MapReduce程序,理论上支持各种计算程序

角色

YARN3大组件:

  • ResourceManager(RM)

    YARN集群中的主角色,资源分配的最终权限,最终仲裁者

  • NodeManager(NM)

    YARN中的从角色,负责管理本机器上的计算资源

    根据RM命令。启动Container容器、监视容器的资源使用情况,并向RM汇报资源使用情况

  • ApplicationMaster(App Mstr)(AM)

    用户提交的每个应用程序均包含一个AM

    应用程序内的”老大”,负责程序内部各阶段的资源申请,监督程序的执行情况

    例如:MRApplicationMaster->MapReduce程序 AM

  • Client
  • Containe容器(资源的抽象)

核心交互流程

  • MR作业提交 Client->RM
  • 资源的申请 MRAppMaster->RM
  • MR作业状态汇报 Container(Map|Reduce Task)->Container(MrAppMaster)
  • 节点的状态汇报 NM->RM

整体概述

  • 第一阶段:客户端申请资源启动运行本次程序的ApplicationMaster
  • 第二阶段:由ApplicationMaster根据本次程序内部具体情况,为它申请资源,并监控它的整个运行过程,直到运行完成

MR提交YARN交互流程

  1. 用户通过客户端向YARN中RM提交应用程序(比如hadoop jar)

  2. RM为该应用程序分配第一个Container,并与对应的NM通信,要求它在这个Container中启动这个应用程序的AM

  3. AM启动成功后,首先向RM注册并保持通信,这样用户可直接通过RM查看应用程序的运行状态
  4. AM为本次程序内部各个Task任务向RM申请资源,并监控它的运行状态
  5. 一旦AM申请到资源后,便于对应的NM通信,要求启动任务
  6. NM为任务设置后运行环境后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务
  7. 各个任务通过某个RPC协议向AM汇报自己的状态和进度,已让AM随时掌握各个任务的运行状态,从而可以在任务失败时重启任务。在应用程序运行过程中,用户可随时通过RPC向AM查询应用程序的当前运行状态
  8. 应用程序运行完成后,AM向RM注销并关闭自己

资源调度器Scheduler

Scheduler:根据一些定义的策略为应用程序分配资源,是RM的核心组件之一

调度器策略:

(yarn-site.xml->yarn.resourcemanager.scheduler.class)

  • FIFO
  • Capacity(default)
  • Fair