大数据学习(二):Hadoop源码分析

本文基于Hadoop 2.6.4版本,详细解析了Map-Reduce作业提交运行的过程,包括作业提交、资源分配、任务执行及进度报告等环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

本文主要从一次完整的Map-Reduce作业提交运行入手分析这个过程中涉及到的Hadoop源码架构,此外本文基于的Hadoop版本是2.6.4

总体流程

这里写图片描述
上图给出了Hadoop在运行一次Map-Reduce作业过程中涉及到的组件交互,其中涉及到的6个进程间交互接口的作用如下:

接口作用
ApplicationClientProtocolclient向ResourceManager提交/丢弃作业
MRClientProtocolClient向MRAppMaster查询作业执行情况
ContainerManagementProtocolResourceManager通过其和NodeManager通信,控制其启动/停止Container
ResourceTrackerNodeManager向ResourceManager注册心跳
ApplicationMasterProtocolMRAppMaster向ResourceManager注册心跳,以及向ResourceManager请求资源
TaskUmnilicallProtolMap/Reduce Task向MRAppMaster报告Task执行进度

作业提交运行的过程大致分为以下步骤:

  1. client 通过 ApplicationClientProtocol 向 ResourceManager 提交作业
  2. ResourceManager 通过 ContainerManagementProtocol 通知NodeManager启动 MRAppMaster(运行在Container中)
  3. MRAppMaster通过 ApplicationMasterProtocol 向 ResourceManager 获取资源(在心跳报告中包含allocate请求)
  4. MRAppMaster通过 ContainerManagementProtocol 向 NodeManager 启动 Container运行Map/Reduce Task
  5. Map/Reduce Task通过 TaskUmbilicalProtocol 向 MRAppMaster报告进度
  6. client 通过 MRClientProtocol 向MRAppMaster获取 作业的执行进度等信息

关键组件分析

看Hadoop源码中感觉事件触发模式和状态机贯穿始终,原理图如下:
这里写图片描述

ResourceManager

ResourceManager 通过 ContainerManagementProtocol 通知NodeManager启动 MRAppMaster的详细流程如下图所示:
这里写图片描述
这其中的事件处理和状态转化的部分可以直观的表示为下图:
这里写图片描述
大致过程为:
1. 客户端提交作业后,初始化相关的 RMAppImpl、RMAppAttemptImpl 后直接提交到 Scheduler 组件中(1,2,3,4,5,6,7,8)
2. NM 产生心跳,ResourceTrackerService 处理后,到调度器选择出 job,最后到 ApplicationMasterLauncher 调用 NM,启动 MRAppMaster(10,11,12,13)
3. MRAppMaster随后就向 RM 注册且向 ApplicationMasterService 申请资源(14,15,16)

MRAppMaster

MRAppMaster通过 ContainerManagementProtocol 向 NodeManager 启动 Container运行Map/Reduce Task并接受Task进度报告过程中的事件流如下图:
这里写图片描述
大致过程为:
1. MRAppMaster 启动最后一步会发送启动 JobImpl 的事件,后初始化 TaskImpl 及 TaskAttemptImpl(1,2,3,4,5,6)
2. TaskAttemptImpl发送CONTAINER_REQ事件给RMContainerAllocator,请求Container资源(7)
3. RMContainerAllocator将接受到资源请求入队,并通过心跳报告,定期向ResourceManager请求资源,当获取到资源后再通知TaskAttemptImpl(8,9,10)
4. TaskAttemptImpl 发送CONTAINER_REMOTE_LAUNCH事件给 ContainerLauncherImpl,请求启动Container。ContainerLauncher 通过 NodeManager 启动 Container后,再发送TA_CONTAINER_LAUNCHED确认消息给 TaskAttemptImpl(11,12)
5. TaskAttemptImpl发送ATTEMPT_LAUNCHED事件给TaskImpl启动Map/Reduce作业线程MRYarnChild(13)
6. MRYarnChild定期调用TaskUmnilicallProtol相应接口(commitPending, sendDone等)汇报Task执行情况(14)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值