学习hadoop已有一段时间, 从最初的搭建环境, 配置环境, 编写MapReduce应用, 到基于hive的查询, 慢慢的开始喜欢和习惯它的这种模式, 最近对hadoop集群环境运行原理很感兴趣, 很想知道它究竟是怎么做到这种分步式的运算与协调, 也很想能够从事这方面的工作. 学习了董西成的<<深入解析MapReduce架构设计与实现原理>>一书后, 慢慢的为我揭开了Hadoop的盖头, 通过分析源码的实现, 从中也深刻的体会到架构设计的美, 配置的灵活, 构思的巧妙. 本篇主要针对Hadoop的核心--任务调度进行分析, 通过代码的分析, 去理解它的设计,这是一种深入学习hadoop的方式.
在这里我使用的hadoop版本为1.1.2 , 针对任务调度主要会整理以下流程, 并去分析各个实现细节, 中间有错误和模糊的地方还请给予指摘, 欢迎交流.
我会以作业提交为起点进行分析:
一> 分析JobTracker的初始化工作和作业的提交和初始化过程,这主要观注于job初始化都做了那些事, 及状态的变化队列管理等.
二> 分析JobTracker的心跳接收与响应, TaskScheduler是如何组织和分配不同的TaskAction命令的, 都采用了那种分配策略.以及TaskTrackerStatus的在JT侧的更新.
三> 分析TaskTracker的的初始化与根据心跳应答启动Task, 这主要会分析任务的行为和启动过程分析.
四> 分析Task的执行过程和中间的一些细节.
五> 分析Task和Job的清理过程.
以上会重点关注任务的调度的分析, 这主要会分析CapacityTaskScheduler的实现. 通过以上的分析, 对于MapReduce应用的整个执行过程会有一个清晰的理解. 针对各个参数的配置会有更明确的理解.
这中间会分析一些hadoop内部使用的技术点
一> RPC的实现机制.
二> JvmManager的管理.
三> 资源管理的分配策略.
四> 安全管理.
特此声明: 本篇可能不会过多涉及hadoop的理论实现. 重点分析具体的代码实现及其细节.
如有了解的请参考hadoop官网, Hadoop权威指南和深入解析MapReduce架构设计与实现原理.
未完待续, 请关注下一篇!