Hadoop 之MapReduce(理论篇)

本文详细介绍了MapReduce在YARN上的运行环境,重点讲解了MRAppMaster的构成,包括资源申请与再分配、Container启动与释放等关键流程。MRAppMaster通过ApplicationClientProtocol和MRClientProtocol协议与ResourceManager和客户端通信,提供了Uber和Non-Uber两种作业运行模式。此外,文章还讨论了推测执行机制和作业恢复策略,确保MapReduce作业高效、可靠地执行。
摘要由CSDN通过智能技术生成

MapReduce On YARN与MRv1在编程模型和数据处理引擎方面的实现是一样的,唯一不同的是运行时环境。不同于MRv1中由JobTracker和TaskTracker构成的运行时环境,MapReduce On YARN的运行时环境由YARN与ApplicationMaster构成,这种新颖的运行时环境使得MapReduce可以与其他计算框架运行在一个集群中,从而达到共享集群资源、提高资源利用率的目的。随着YARN的成熟与完善,MRv1的独立运行模式将被MapReduce On YARN所取代。

MRAppMaster是MapReduce的ApplicationMaster实现,它使得MapReduce应用程序可以直接运行于YARN之上。在YARN中,MRAppMaster负责管理MapReduce作业的生命周期,包括作业管理、资源申请与再分配、Container启动与释放、作业恢复等。下面将介绍MRAppMaster的基本构成。

1、MRAppMaster的基本构成

如下图所示,MRAppMaster主要由以下几种组件/服务构成。

这里写图片描述

  • ContainerAllocator。同ResourceManager通信,为MapReduce作业申请资源。作业的每个任务资源需求可描述为5元组(priority,hostname,capability,containers,relax_locality),分别表示作业优先级、期望资源所在的host、资源量(当前仅支持内存和CPU两种资源)、Container数目、是否松弛本地性。ContainerAllocator周期性通过RPC协议与ResourceManager通信,而ResourceManager则通过心跳应答的方式为之返回已经分配的Container列表、完成的Container列表等信息;

  • ClientService。ClientService是一个接口,由MRClientService实现。MRClientService实现了MRClientProtocol协议,客户端可通过该协议获取作业的执行状态(不必通过ResourceManager)和控制作业(比如杀死作业、改变作业优先级等);

  • Job。Job表示一个MapReduce作业,与MRv1的JobInProgress功能一样,负责监控作业的运行状态。它维护了一个作业状态机,以实现异步执行与各种作业相关的操作;

  • Task。Task表示一个MapReduce作业中的某个任务,与MRv1中的TaskInProgress功能类似,负责监控一个任务的运行状态。它维护了一个任务状态机,以实现异步执行与各种任务相关的操作;

  • TaskAttempt。TaskAttempt表示一个任务运行实例,它的执行逻辑与MRv1中的MapTask和ReduceTask运行实例完全一致,实际上,它直接使用了MRv1的数据处理引擎,但经过了一些优化。正是由于它与MRv1的数据处理引擎一样,对外提供的编程接口也与MRv1完全一致,这意味着MRv1的应用程序可直接运行于YARN之上;

  • TaskCleaner。TaskCleaner负责清理失败任务或者被杀死任务使用的目录和产生的临时结果(可统称为垃圾数据),它维护了一个线程池和一个共享队列,异步删除任务产生的垃圾数据;

  • Speculator。Speculator完成推测执行功能。当同一个作业的某个任务运行速度明显慢于其他任务时,Speculator会为该任务启动一个备份任务,让它与原任务同时处理同一份数据,谁先计算完成则将谁的结果作为最终结果,并将另一个任务杀掉。该机制可有效防止那些“拖后腿”任务拖慢整个作业的执行进度;

  • ContainerLauncher。ContainerLauncher负责与NodeManager通信,以启动一个Container。当ResourceManager为作业分配资源后,ContainerLauncher会将任务执行相关信息填充到Container中,包括任务运行所需资源、任务运行命令、任务运行环境、任务依赖的外部文件等,然后与对应的NodeManager通信,要求它启动Container;

  • TaskAttemptListener。TaskAttemptListener负责管理各个任务的心跳信息,如果一个任务一段时间内未汇报心跳,则认为它死掉了,会将其从系统中移除。同MRv1中的TaskTracker类似,它实现了TaskUmbilicalProtocol协议,任务会通过该协议汇报心跳,并询问是否能够提交最终结果;

  • JobHistoryEventHandler。JobHistoryEventHandler负责对作业的各个事件记录日志,比如作业创建、作业开始运行、一个任务开始运行等,这些日志会被写到HDFS的某个目录下,这对于作业恢复非常有用。当MRAppMaster出现故障时,YARN会将其重新调度到另外一个节点上。为了避免重新计算,MRAppMaster首先会从HDFS上读取上次运行产生的日志,以恢复已经运行完成的任务,进而能够只运行尚未运行完成的任务。

2、MapReduce客户端

MapReduce客户端是MapReduce用户与YARN以及MRAppMaster进行通信的唯一途径,通过该客户端,用户可以向YARN提交作业,获取作业的运行状态和控制作业(比如杀死作业、杀死任务等)。MapReduce客户端涉及两个RPC通信协议:

  • ApplicationClientProtocol。在YARN中,ResourceManager实现了ApplicationClientProtocol协议,任何客户端需使用该协议完成提交作业、杀死作业、改变作业优先级等操作;

  • MRClientProtocol。当作业的ApplicationMaster成功启动后,它会启动MRClientService服务,该服务实现了MRClientProtocol协议,从而允许客户端直接通过该协议与ApplicationMaster通信以控制作业和查询作业运行状态,以减轻ResourceManager的负载。

  • 为了与MRv1的客户端兼容,MRAppMaster混合使用了继承和组合的设计模式。通过使用继承设计模式,MRAppMaster可保证它的对外接口与MRv1的一致,通过使用组合设计

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值