MapReduce运行框架

在Hadoop1.X版本中,MapReduce是通过JobTracker运行实现的
MapReduce运行框架
我们写好MapReduce程序打成jar包交给client端,client把jar包提交到JobTracker。JobTracker把这个作业拆分成很多份,然后分配给TaskTracker去执行。JobTracker和TaskTracker是主从关系,通过心跳机制管理。TaskTracker并不是随机分配任务的,这里有个概念叫:数据本地化。意思是:将map task分配给含有该map处理的数据块(block)的TaskTracker上,运算向数据移动。在分配reduce任务时并不考虑数据本地化。

在MR1.X运行架构中,有3个角色:

  • JobTracker
  • TaskTracker
  • Client

JobTracker是这个框架的核心,在框架中不仅是资源调度的主节点,也是任务调度的主节点。这会造成节点负载过重,容易发生单点故障。而且资源管理与计算调度强耦合,其他计算框架需要重复实现资源管理。不同框架对资源不能全局管理。

在Hadoop2.X版本中,引入的资源管理系统yarn
MapReduce运行框架

工作流程:

  1. client拿到Application计算的文件的路径,向NameNode获取每一个block的位置
  2. client向ResourceManager申请ApplicationMaster的资源
  3. ResourceManager接收到客户端的申请,随机找一个资源相对充足的节点启动Container容器
  4. 在某个节点启动了Container后,NodeManager会在这个容器中启动一个ApplicationMaster线程
  5. 客户端会将block位置的报表交给ApplicationMaster
  6. ApplicationMaster接收报表后,根据报表向ResourceManager申请资源,启动yarn-child线程
  7. ApplicationMaster分发map task/reduce task到各个yarn-child线程执行

角色分布:

在MR2.X运行架构中,同样有3大角色:

  • yarn
    • ResourceManager
      yarn集群的主节点,资源管理和调度
    • NodeManager
      从节点,与RM汇报资源,管理Container生命周期
    • Container
      容器,启动ApplicationMaster线程
  • ApplicationMaster
    任务调度器,避免单点故障,负载到不同的节点
    负责任务切分、任务调度、任务监控和容错
  • Client

YARN的引入,将资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现,使得多个计算框架可运行在一个集群中,MapReduce作业直接运行在YARN上,每个MapReduce作业对应一个ApplicationMaster。