分享

Hadoop 源代码组织结构

本帖最后由 lzw 于 2013-11-30 17:11 编辑

hadoop源码结构.png

直接解压Hadoop 压缩包后,可看到上图所示的目录结构,其中,比较重要的目录
有src、conf、lib、bin 等。下面分别介绍这几个目录的作用:
src :Hadoop 源代码所在的目录。最核心的代码所在子目录分别是core、hdfs 和
mapred,它们分别实现了Hadoop 最重要的三个模块,即基础公共库、HDFS 实现和
MapReduce 实现。
conf:配置文件所在目录。Hadoop 的配置文件比较多,其设计原则可概括为如下两点。
  • 尽可能模块化,即每个重要模块拥有自己的配置文件,这样使得维护以及管理变得简单。
  • 动静分离,即将可动态加载的配置选项剥离出来,组成独立配置文件。比如,

Hadoop 1.0.0 版本之前,作业队列权限管理相关的配置选项被放在配置文件mapredsite.
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 MapReduce 源代码组织结构:
mapreduce.png

总体上看,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
安全机制。

加入qq群(号码:39327136),讨论云技术,获取最新资讯资源等

欢迎加入about云群9037177932227315139327136 ,云计算爱好者群,亦可关注about云腾讯认证空间||关注本站微信

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条