Hadoop源代码组织结构

文章转自:http://book.51cto.com/art/201312/422113.htm

1.4 Hadoop源代码组织结构

直接解压Hadoop压缩包后,可看到图1-11所示的目录结构,其中,比较重要的目录有src、conf、lib、bin等。下面分别介绍这几个目录的作用:

src:Hadoop源代码所在的目录。最核心的代码所在子目录分别是core、hdfs和mapred,它们分别实现了Hadoop最重要的三个模块,即基础公共库、HDFS实现和MapReduce实现。

conf:配置文件所在目录。Hadoop的配置文件比较多,其设计原则可概括为如下两点。

尽可能模块化,即每个重要模块拥有自己的配置文件,这样使得维护以及管理变得简单。

动静分离,即将可动态加载的配置选项剥离出来,组成独立配置文件。比如,Hadoop 1.0.0版本之前,作业队列权限管理相关的配置选项被放在配置文件mapred-site.xml中,而该文件是不可以动态加载的,每次修改后必须重启MapReduce。但从1.0.0版本开始,这些配置选项被剥离放到独立配置文件mapred-queue-acls.xml中,该文件可以通过Hadoop命令行动态加载。conf目录下最重要的配置文件有core-site.xml、hdfs-site.xml和mapred-site.xml,分别设置了基础公共库core、分布式文件系统HDFS和分布式计算框架MapReduce的配置选项。

lib:Hadoop运行时依赖的三方库,包括编译好的jar包以及其他语言生成的动态库。Hadoop启动或者用户提交作业时,会自动加载这些库。

bin:运行以及管理Hadoop集群相关的脚本。这里介绍几个常用的脚本。

hadoop:最基本且功能最完备的管理脚本,其他大部分脚本都会调用该脚本。

start-all.sh/stop-all.sh:启动/停止所有节点上的HDFS和MapReduce相关服务。

start-mapred.sh/stop-mapred.sh:单独启动/停止MapReduce相关服务。

start-dfs.sh/stop-dfs.sh:单独启动/停止HDFS相关服务。

Hadoop源代码组织结构_第1张图片

本书重点介绍MapReduce的实现原理,下面就Hadoop MapReduce源代码组织结构进行介绍。Hadoop MapReduce源代码组织结构如图1-12所示。

Hadoop源代码组织结构_第2张图片

总体上看,Hadoop MapReduce分为两部分:一部分是org.apache.hadoop.mapred.*,这里面主要包含旧的对外编程接口以及MapReduce各个服务(JobTracker以及TaskTracker)的实现;另一部分是org.apache.hadoop.mapreduce.*,主要内容涉及新版本的对外编程接口以及一些新特性(比如MapReduce安全)。

1. MapReduce编程模型相关

org.apache.hadoop.mapred.lib.*:这一系列Java包提供了各种可直接在应用程序中使用的InputFormat、Mapper、Partitioner、Reducer和OuputFormat,以减少用户编写MapReduce程序的工作量。

org.apache.hadoop.mapred.jobcontrol:该Java包允许用户管理具有相互依赖关系的作业(DAG作业)。

org.apache.hadoop.mapred.join:该Java包实现了map-side join算法。该算法要求数据已经按照key排好序,且分好片,这样可以只使用Map Task实现join算法,避免re-partition、sort、shuffling等开销。

org.apache.hadoop.mapred.pipes:该Java包允许用户用C/C++编写MapReduce作业。

org.apache.hadoop.mapreduce:该Java包定义了一套新版本的编程接口,这套接口比旧版接口封装性更好。

org.apache.hadoop.mapreduce.*:这一系列Java包根据新版接口实现了各种InputFormat、Mapper、Partitioner、Reducer和OuputFormat。

2. MapReduce计算框架相关

org.apache.hadoop.mapred:Hadoop MapReduce最核心的实现代码,包括各个服务的具体实现。

org.apache.hadoop.mapred.filecache:Hadoop DistributedCache实现。DistributedCache是Hadoop提供的数据分发工具,可将用户应用程序中需要的文件分发到各个节点上。

org.apache.hadoop.mapred.tools:管理控制Hadoop MapReduce,当前功能仅包括允许用户动态更新服务级别的授权策略和ACL(访问权限控制)属性。

org.apache.hadoop.mapreduce.split:该Java包的主要功能是根据作业的InputFormat生成相应的输入split。

org.apache.hadoop.mapreduce.server.jobtracker:该Java包维护了JobTracker可看到的TaskTracker状态信息和资源使用情况。

org.apache.hadoop.mapreduce.server.tasktracker.*:TaskTracker的一些辅助类。

3. MapReduce安全机制相关

这里只涉及org.apache.hadoop.mapreduce.security.*。这一系列Java包实现了MapReduce安全机制。

你可能感兴趣的:(Hadoop源代码组织结构)