hadoop源代码组织结构与阅读技巧
本文将介绍在 Eclipse 下阅读 Hadoop 源代码的一些技巧, 比如如何查看一个基类有哪些派生类、 一个方法被其他哪些方法调用等。
本文地址:http://www.cnblogs.com/archimedes/p/study-hadoop-sourcecode.html,转载请注明源地址。
欢迎关注我的个人博客:www.wuyudong.com, 更多云计算与大数据的精彩文章
1 . 查看一个基类或接口的派生类或实现类
在 Eclipse 中, 选中 某个基类或接口名称,右击,在弹出 的快捷菜单中选择“ Quick Type Hierarchy”, 可在新窗口中看到对应的所有派生类或实现类。
例如, 打开 src\mapred\ 目 录下 org.apache.hadoop.mapred 包中的 InputFormat.java 文件, 查看接口 InputFormat 的所有实现类

在 Eclipse 中查看 Hadoop 源代码中接口 InputFormat 的所有实现类
结果如下所示:

2. 查看函数的调用关系
在 Eclipse 中, 选中某个方法名称, 右击,在弹出的快捷菜单中选择“Open CallHierarchy”, 可在窗口“Call Hierarchy” 中看到所有调用该方法的函数。
例如,如 图所示,打开src\mapred\ 目录下org.apache.hadoop.mapred 包中的JobTracker.java 文件, 查看调用方法 initJob 的所有函数,

在 Eclipse 中查看 Hadoop 源代码中所有调用 JobTracker.java 中 initJob 方法的函数
Eclipse 列出所有调用 initJob 方法的函数
3. 快速查找类对象的相关信息
同前两个技巧类似, 选中类对象, 右击, 在弹出的快捷菜单中选择“ Open Declaration”,可跳转到类定义 ; 选择“ Quick Outline”, 可查看类所有的成员变量和成员方法。
这里就不再赘述
4. Hadoop 源代码组织结构
直接解压 Hadoop 压缩包后, 可看到图 1 -11 所示的目 录结构,

其中, 比较重要的目录有 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 源代码组织结构进行介绍。 Hadoop MapReduce 源代码组织结构,如图所示:
总体上看, 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技术内幕 深入理解MapReduce架构设计与实现原理》
hadoop源代码组织结构与阅读技巧的更多相关文章
- Hadoop 源代码组织结构
Hadoop 2.X 包括 编译好的可以直接部署的文件hadoop-{VERSION}.tar.gz; 还有源代码文件hadoop-{VERSION}-src.tar.gz , 需要 Maven 编译 ...
- 如何高效的阅读hadoop源代码?
个人谈谈阅读hadoop源代码的经验. 首先,不得不说,hadoop发展到现在这个阶段,代码已经变得非常庞大臃肿,如果你直接阅读最新版本的源代码,难度比较大,需要足够的耐心和时间,所以,如果你觉得认真 ...
- Hadoop 源码阅读技巧
http://www.cnblogs.com/xuxm2007/category/388607.html 个人谈谈阅读hadoop源代码的经验.首先,不得不说,hadoop发展到现在这个阶段, ...
- 调试 Hadoop 源代码
环境是 64bit Ubuntu 14.04 系统, jdk 1.7 以及 Eclipse Mars (4.5) 这里介绍两种调试 Hadoop 源代码的方法: 利用 Eclipse 远程调试工具和打 ...
- Eclipse中导入Hadoop源代码工程
以hadoop 2.7.3为例, jdk1.7.0_80 , Eclipse Mars(4.5), Apache Maven 3.0.5 mvn时需要使用root权限,即县切换到root用户,用命 ...
- 将hadoop源代码导入eclipse
1. 安装JDK,eclipse,下载hadoop源代码并解压到某一个目录. 2. 安装maven,将bin目录添加到PATH环境变量中. 3. 安装protobuf2.5.0,将protoc-2.5 ...
- eclipse下编译hadoop源代码(转)
hadoop是一个分布式存储和分布式计算的框架.在日常使用hadoop时,我们会发现hadoop不能完全满足我们的需要,我们可能需要修改hadoop的源代码并重新编译.打包. 下面将详细描述如何从sv ...
- Hadoop源代码分析
http://wenku.baidu.com/link?url=R-QoZXhc918qoO0BX6eXI9_uPU75whF62vFFUBIR-7c5XAYUVxDRX5Rs6QZR9hrBnUdM ...
- hadoop源代码解读namenode高可靠:HA;web方式查看namenode下信息;dfs/data决定datanode存储位置
点击browserFilesystem,和命令查看结果一样 当我们查看hadoop源代码时,我们看到hdfs下的hdfs-default.xml文件信息 我们查找${hadoop.tmp.dir}这是 ...
随机推荐
- .NET基本权限系统框架源代码
DEMO下载地址: 百度网盘:http://pan.baidu.com/s/147ilj http://download.csdn.net/detail/shecixiong/5372895 一.开发 ...
- (14) go 结构体
1. 声明一个结构体 2.属性 如果是 指针 切片 map 需要用make 3.赋值 (2) (3) (4) 4. 正确,字段相同,数据类型相同,名字相同 5.
- python3 爬虫之爬取安居客二手房资讯(第一版)
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author;Tsukasa import requests from bs4 import Beau ...
- ACID数据库事务正确执行的四个基本要素的缩写
ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持事务(T ...
- BASE64Decoder BASE64Encoder jar包问题
操作 对项目右击--->build path--->configure build path---> 选中默认jre OK,操作完毕, import sun.misc.BASE64D ...
- Bzoj2038/洛谷P1494 小Z的袜子(莫队)
题面 Bzoj 洛谷 题解 考虑莫队算法,首先对询问进行分块(分块大小为\(sqrt(n)\)),对于同一个块内的询问,按照左端点为第一关键字,右端点为第二关键字排序.我们统计这个区间内相同的颜色有多 ...
- 洛谷——P4017 最大食物链计数
P4017 最大食物链计数 题目背景 你知道食物链吗?Delia生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条.于是她来就来求助你,然而你也不会啊!写一个程序来帮帮她吧 ...
- XPath中的text()和string()区别(转)
原文地址 : http://blog.csdn.net/jiangchao858/article/details/63314426 本质区别 text()是一个node test,而string()是 ...
- java8新特性——方法引用与构造器引用
上篇文章简单学习了java8内置得4大核心函数式接口,这类接口可以解决我们遇到得大多数得业务场景得问题.今天来简单学习一下方法引用与构造器引用. 一.方法引用 方法引用:若lambda 体中得内容已经 ...
- HDU 1325(并查集)
Is It A Tree? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...