MapReduce工作机制

作业提交

  1. 创建一个job实例
  2. 向ResourceManage请求一个新应用ID
  3. 将运行所需要的资源复制到一个以作业ID命令的目录下的共享文件系统中
  4. 通过ResourceManage的submitApplication()方法提交作

作业初始化

  1. 将提交的作业请求传递给Yarn调度器,调度器分配一个容器,资源管理器在节点管理器的管理下,在容器中启动application Master进程
  2. application Master是一个JVM进程,主类是MRAppMaster,接受来自任务的进度和完成报告
  3. 接受来自共享文件系统的,在客户端计算的输入分片,对每一个分片创建一个map任务,以及reduce任务对象
  4. 如果作业不适合作为uber任务运行,则会为map和reduce任务向ResourceManage请求容器

任务的执行

  1. 一旦ResourceManage为任务分配容器后,application Master就通过NodeManager来启动容器
  2. 将任务需要的资源本地化(如:jar文件,缓存文件,配置)
  3. 运行map或reduce任务

进度和状态的更新

任务运行时,对其进度(progress,完成百分比)保持追踪,整个过程分为3个阶段,与shuffle的三个阶段相对应
当map或reduce任务运行时,子进程和自己的父application master通过umbilical接口通信
在作业期间,客户端每秒轮训一次application master,接收最新状态

作业完成

application master和任务容器清理其工作状态,commitJob()方法被调用,存档

失败

如果代码发生异常,任务JVM会在退出前向其父application master发送错误报告
如果一个任务失败过4次,将不会再重试
可设置任务失败最大百分比
被终止的任务尝试,不会被计入任务运行尝试次数

application master失败
节点管理器失败
资源管理器失败
可采用zookeeper构建高可用resourceManager

shuffle和排序


map端
  1. 利用缓冲的方式写到内存并处于效率考虑进行排序
  2. 每个map任务都有一个环形内存缓冲区用于存储任务输出,默认100MB,达到阈值开始把内存溢出到磁盘
  3. 写入磁盘前,根据最终要传的reduce把数据划分成相应分区partition,每个分区中,按键进行内存中排序,combiner
  4. 每次达到输出阈值,会新建一个溢出文件,在任务完成之前,合并已排序的输出文件
reduce端
  1. 复制map的输出后,reduce进入合并阶段,复制阶段可用解压缩节省效率
  2. 对已排序输出中的每个键调用reduce函数,输出直接写入文件系统
配置调优
总的原则是给shuffle过程尽量多的提供内存空间


  1. map端,可通过避免多次溢出写磁盘获得最佳性能,估算map输出大小,可计算作业运行整个阶段汇总溢出写磁盘的记录数
  2. reduce端,中间数据驻留在内存时,就能获得最佳性能.




任务执行

推测执行
Hadoop不会尝试诊断或修复执行慢的任务,相反,在一个任务运行比预期慢的时候,他会尽量检测,并启动
一个相同的任务作为备份,这就是“推测执行”
一个任务成功完成后,任何正在运行的重复任务都被终止
默认推测执行时启用的
对于reduce任务,关闭推测执行是有益的







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值