6.Hadoop_MapReduce计算框架介绍、架构原理、yarn资源管理

MapReduce介绍

6.Hadoop_MapReduce计算框架介绍、架构原理、yarn资源管理

MapReduce分为2部分:MapTaskReduceTask

MapTask会把数据映射成一个k,v格式的中间数据集。每组相同key组成的数据(一般情况下)会并发调用reduce方法,方法内迭代这组数据进行计算(类似sql)

MapTask数量:对Block Spilt(切片),每一个Spilt(片)会分配一个MapTask

ReduceTask数量:一般情况下 相同的key产生的数据组数量和ReduceTask相同,当key数据组中数据量较少时可以使用一个ReduceTask进行处理(一个Reduce可以处理多组key),但是相同的一组key只能由一个Redurce处理

执行流程

6.Hadoop_MapReduce计算框架介绍、架构原理、yarn资源管理

  1. MR框架执行时 会对Block进行Spilt(逻辑切片)操作。MR框架会根据每个Split片生成相对应的Map进行处理。
  2. MapTask产生的kv格式数据放入 Buffer In menmory 内存缓冲区中(当缓冲区超过128m会对磁盘进行数据益写,每次益写都会生成一个文件,文件内部有序文件与文件之间无序),在缓冲区中会对数据按照同一ReduceTask(partition同一分区)执行划分到一组中(通过reduce粗粒度的分区排序
  3. 当数据处理完后会对益写的多个文件进行合并,合并后数据进行Shuffer二次分组(通过key进行细粒度的二次排序
  4. Shuffer后的数据进行 combiner 压缩(根据reduce需要进行运算),实现数据传输最小化。

MR 1.x 架构说明

6.Hadoop_MapReduce计算框架介绍、架构原理、yarn资源管理

Client

  • 以作业(Job)为单位、规划作业计算分布(数据读取位置、输出位置、spilt等)
  • 提交作业资源到HDFS(以jar包的形式提交到hdfs中)最终提交作业到JobTracker

JobTracker

  • 核心主节点
  • 从hdfs中获取jar包任务,从NameNode获取Block信息,开启从节点TaskTracher,调度所有的task作业。
  • 监控整个集群的资源负载,管理当前集群资源

TaskTracker

  • JobTracker的从节点,自身节点资源管理
  • 从提取HDFS中的jar包任务
  • 向JobTracker心跳,实时汇报资源,获取Task,并开启MapTask或ReduceTask任务,向JobTracker申请执行任务

弊端:

  • JobTracker:负载过重,单点故障
  • 资源管理与计算调度强耦合(JobTracker即负责资源调度、任务管理、负责资源管理),其他计算框架需要重复实现资源管理(不能共享资源状况),不同框架对资源不能全局管理

MR 2.x 架构说明

6.Hadoop_MapReduce计算框架介绍、架构原理、yarn资源管理

MR 2.x 基于Yarn 进行资源管理

图中具体说明流程:

  1. Clinet 提交 Job 到 ResourceManager
  2. ResourceManager 找寻一个资源空闲的节点,创建(开辟)App Mstr (Application Master)角色进程
  3. App Mstr 负责任务调度(每个job都会产生一个App Mstr ),从HDFS中获取相关任务(客户端提交的jar包),计算设计该job所需的资源 向ResourceManager 确认资源可用性(是否被占用)
  4. App Mstr 得到 ResourceManager 资源信息确认后,找到相应节点创建Container(资源容器,默认大小1024M)
  5. 在Container创建相关Task作业(MapTask或ReduceTask)
  6. NodeManager 负责统计该节点中所有Container大小(节点信息)汇报给ResourceManager ,同时ResourceManager也负责节制Container大小,当Task超过Container默认大小时,会结束Task(Task执行失败)

Yarn 资源管理

YARN:Yet Another Resource Negotiator;

Hadoop 2.0新引入的资源管理系统,直接从MRv1演化而来的;

核心思想:将MR1.x中JobTracker的资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现

  • ResourceManager:负责整个集群的资源管理和调度
  • ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控和容错等

YARN的引入,使得多个计算框架可运行在一个集群中,统一由yarn管理资源

  • 每个应用程序对应一个ApplicationMaster
  • 目前多个计算框架可以运行在YARN上,比如MapReduce、Spark、Storm等

架构说明

  • YARN( 解耦资源与计算 ):

    ResourceManager:核心主节点,负责集群节点资源管理

    NodeManager :负责管理当前节点资源

    • 与RM发送心跳,汇报资源(通过Container 计算资源使用情况)

    • 管理Container生命周期

    • 计算框架中的角色都以Container表示(一切皆资源)

    Container (节点NM,CPU,MEM,I/O大小,启动命令):Container可以理解为资源容器,存放所有需要资源的作业

    • 默认NodeManager启动线程监控Container大小,超出申请资源额度,kill

    • 支持Linux内核的Cgroup

  • MR:
    ApplicationMaster:

    • 作业为单位,避免单点故障,负载到不同的节点

    • 创建Task需要和RM申请资源(Container /MR 1024MB)

    Task:MapTask 或 Reduce Task 创建在Container中

  • Client

    RM-Client:请求资源创建AM

    AM-Client:与AM交互

MapReduce 与 Spark 提交对比

6.Hadoop_MapReduce计算框架介绍、架构原理、yarn资源管理