Hadoop生态圈之MapReduce批计算框架简述

MapReduce
- 映射、变换、过滤- 分解、缩小、归纳
- 1进N出- 1组进N出

在这里插入图片描述

Map的并行度由切片的数量来决定,Reduce的并行度由人决定

MR计算的原理:

数据以一条记录为单位经过Map方法映射成KV,相同的key为一组,这一组数据调用一次Reduce方法,在方法内迭代计算这组数据

角色:

  • JobTracker
    • 资源管理
    • 任务调度
  • TaskTracker
    • 任务管理
    • 资源汇报

计算向数据移动的流程,Hadoop1.x

  • Cli

    • 会根据每次的计算任务,咨询NameNode元数据,通过block块酸楚切片(split),得到一个切片清单
    • split是逻辑的,block是物理的,block身上有(offset、locations),split与block形成映射关系,指引split对应的map任务应该移动到哪些节点(即:计算向数据移动)
    • 生成未来运行时的计算程序的相关配置文件
    • cli会将jar、配置xml、split清单上传到HDFS的目录中
    • cli会调用JobTacker通知要启动一个计算程序了,并且告知文件都放在了hdfs的哪些地方
  • JobTracker收到启动程序之后:

    • 从hdfs中取回split清单

    • 根据已收到的TaskTracker汇报的资源数据,确定最终每一个split对应的map应该去哪个节点

    • 当后面TaskTacker再汇报的时候就会取回分配给自己的任务信息

  • TaskTacker:

    • 在心跳取回任务后,从HDFS中下载jar、xml等资源到本机

    • 最终启动任务描述中的MapTask/ReduceTask执行相关逻辑

Hadoop1.x 中JobTracker的三大问题

  • 容易出现单点故障
  • 压力过大(调度可能会有延迟)
  • 集成了资源管理、任务调度两者耦合,带来的弊端是:
    • 未来新的计算框架不能复用资源管理
    • 因为各自实现资源管理,当部署在同一批硬件上时,因为隔离,所以不能感知对方的使用情况,造成资源争抢!

Hadoop2.x淘汰了以上的处理流程,出现了yarn架构

yarn架构:将1.x中JobTracker的资源管理功能独立出来,进行独立的资源管理

  • 模型:

    • container容器

      • 虚的:对象、属性、nodeManager、cpu、内存、io

      • 物理:

        • jvm进程->操作系统进程

        • NodeManager会有线程监控container资源情况,若有超额,会由NM直接kill掉

        • 通过cgroup(内核级)技术,在启动jvm进程的时候,由kernel约束死

          *整合docker

  • 架构/框架

    • ResourceManager

      • 负责整体资源的管理
    • NodeManager

      • 向ResourceManager汇报心跳,提交自己的资源情况
  • 运行流程(MapReduce On Yarn)

    • MR-cli(切片清单、配置、jar、商出单hdfs)
    • MR-cli 访问ResourceManager申请AppMaster
    • ResourceManager选择一台节点,通知NodeManager启动一个Container,在里面反射一个MapReduce AppMaster
    • 启动MapReduce AppMaster,从hdfs下载切片清单,向ResourceManager申请资源
    • 由ResourceManager根据自己掌握的资源情况得到一个确定清单,通知NodeManager来启动container
    • container启动后会反向注册到已经启动的ResourceManager AppMaster进程
    • ResourceManager AppMaster(曾经的JobTasker阉割版不带资源管理的)最终将任务发送给container
    • container会反射相应的Task类为对象,调用方法执行,其结果就是我们的业务逻辑代码的执行
    • 计算框架都有Task失败重试的机制
  • 结论:

    • 单点故障:曾经时全局的,即JobTracker挂了,整个计算层都没有了调度
      • 现在,每一个App有一个自己的AppMaster调度,yarn也支持AppMaster失败重试
    • 压力过大:yarn每个计算程序自有AppMaster,每个AppMaster只负责自己计算程序的任务调度,轻量了;AppMaster是在不同的节点中启动的,有了负载
    • 集成了资源管理、任务调度两者耦合:
      • yarn只是资源管理框架,不负责具体的任务调度,进行了解耦
      • 是公共的,只要计算框架继承了yarn的AppMaster的接口,大家都可以使用一个统一视图的资源管理层。

从1.x到2.x:1.x的JobTacker、TaskTracker是MR的常服务,2.x之后没有了这些服务,相应的:MR的cli、调度、任务都变成了临时服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值