深入理解MapReduce作业的运行机制

运行机制主要包括以下5个实体:
客户端:提交MapReduce作业;
YARN 资源管理器(ResourceManager,RM):负责协调集群上计算机资源的分配;
YARN 节点管理器(NodeManager,NM):负责启动和监视集群中机器的计算容器(container);
MapReduce的application master(一个Java 应用程序,MRAppMaster是其主类):负责协调MapReduce作业的任务,它和MapReduce任务在容器中运行,这些容器由RM分配并由NM进行管理。
主要过程如下图所示,图片来自《Hadoop权威指南》
在这里插入图片描述

作业的提交
  • 客户端启动一个Job
  • 客户端向RM请求一个新的作业,随后RM向客户端返回一个作业ID和资源的提交路径
  • 客户端将Job所需要的资源(作业JAR文件、配置文件和计算所得的输入分片)复制到一个以作业ID命名的目录下的共享文件系统
  • 客户端向RM提交Job
作业的初始化
  • RM收到请求之后,并将请求传递给YARN调度器(scheduler),调度器分配一个容器,然后RM在NM的管理下在容器中启动application master的进程
  • MRAppMaster对作业进行初始化,创建多个对象对作业进行跟踪;
  • MRAppMaster从共享文件中获取分片信息,每一个分片创建map任务以及指定的reduce任务,任务ID在此时分配;如果作业很小(少于10个mapper且只有1个reducer且输入大小小于一个HDFS块的作业),会与MRAppMaster在同一个JVM上运行(在新的容器中分配和运行任务的开销大于并行运行它们的开销,uber任务);
任务的分配
  • 若作业不适合作为uber任务运行,那么application master就会为该作业的所有map任务和reduce任务想RM请求容器处理map任务请求(map任务必须在reduce的排序阶段能够启动前完成),再reduce;reduce任务能够在集群中任意位置运行,但map任务的请求有着数据本地化局限(任务在分片驻留的同一节点上运行)
任务的执行
  • 一旦RM的调度器为任务分配了一个特定节点上的容器,application master就通过与NM通信来启动容器,这些任务由YarnChild进程执行;
  • NM从共享文件系统获得Job相关资源
  • 运行map和reduce任务
进度和状态的更新
  • 任务状态周期性向application master汇报,客户端定期轮询application master以接收最新状态
作业的完成
  • 当application master收到作业最后一个任务已完成的通知后,便把作业的状态设置为“成功”;Job轮询状态时,便知道任务已经完成;再就是application master会发送一个HTTP作业通知,客户端通过mapreduce.job.end-notification.url属性进行设置;
  • 作业完成,application master和任务容器清理其工作状态(中间输出将被删除)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值