整个Hadoop体系在不同的版本上,随着项目配套越来越多,代码结构上差异也比较大;这里先从1.0版本开始理解起,看看Hadoop及其在的Mapreduce计算框架都经历了怎样的演进和变化。
Hadoop1.0版本代码结构
整个Hadoop技术栈体系包括HDFS、MapReduce两大部分,其中核心代码对应如下:
1.core代码目录,存放一些公共组件代码
2.hdfs分布式存储文件系统代码
3.mapred MapReduce计算框架代码
4.native 一些本地库代码的实现,比如压缩编解码器,非java语言实现
MapReduce计算框架代码
旧MapReduce计算框架相关代码
旧MapReduce编程模型代码
整个1.0版本的工程中,和MapReduce计算编程模型相关实现的代码如下:</p>新版本MapReduce计算框架代码整合
新版本的MapReduce编程模型,在其中专门的目录中进行了整合,将编程模型和框架功能进行了统一梳理:</p>MapReduce计算框架架构前面已经介绍过了,大概由提供给开发者的mapreduce编程模型API、jobtracker、tasktracker任务调度模块构成。
MapReduce的编程模型大概如下:
MapReduce编程模型是一个文件系统计算处理的模型,该模型包括如下构成部分。
1)input
文件输入管理器,计算模型处理的是文件数据,因此输入管理器负责按照split维度划分对应的通道加载文件数据,进行格式统一转换。
这里HDFS中文件是以block为单位存储的,map的task加载的维度和split单位对应,因此split组件实现block到split的逻辑划分。
2)map task
该步骤实现任务加载数据进行阶段处理计算能力,其输出是以partition为单位存放在本地存储中,供后续reduce task模块处理。
3)reduce task
该步骤负责聚合处理结果,从partition加载中间数据,聚合处理的步骤在reduce的任务中。同时reduce通过output输出管理器输出最终计算结果。
4)output
文件输出管理器,最终聚合任务输出结果,按照output格式处理,最终输出落地的结果文件