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}这是 ...
随机推荐
- JSP内置对象——request对象
request对象request对象封装了由客户端生成的HTTP请求的所有细节,主要包括HTTP头信息.系统信息.请求方式和请求参数等. 通过request对象提供的各种方法可以处理客户端浏览器提交的 ...
- socket的使用一
socket概念 socket层 理解socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协 ...
- C和指针之学习笔记(2)
第6章 指针 1.在一组字符串中查找字符: #include<stdio.h> #include<assert.h> #include<stdlib.h> #def ...
- 【BZOJ 2728】 2728: [HNOI2012]与非 (线性基?)
2728: [HNOI2012]与非 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 813 Solved: 389 Description Inpu ...
- 【UOJ 117】欧拉回路
#117. 欧拉回路 有一天一位灵魂画师画了一张图,现在要你找出欧拉回路,即在图中找一个环使得每条边都在环上出现恰好一次. 一共两个子任务: 这张图是无向图.(50分) 输入格式 第一行一个整数 t, ...
- 「TJOI 2018」教科书般的亵渎
「TJOI 2018」教科书般的亵渎 题目描述 小豆喜欢玩游戏,现在他在玩一个游戏遇到这样的场面,每个怪的血量为 \(a_i\) ,且每个怪物血量均不相同, 小豆手里有无限张"亵渎" ...
- 51nod1624 取余最长路 前缀和 + set
由于只有3行,因此只会会换行2次,假设$x, y$分别为这两次的换行点 那么答案为$S[1][x] +S[2][y] - S[2][x - 1] + S[3][n] - S[3][y - 1]$ 其中 ...
- 2018BNU校赛总决赛
题解是qls的题解我就懒得写了23333 A塞特斯玛斯塔 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld ...
- bzoj 2754 ac自动机
第一道AC自动机题目. 记一下对AC自动机的理解吧: AC自动机=Trie+KMP.即在Trie上应用KMP思想,实现多Pattern的匹配问题. 复杂度是预处理O(segma len(P)),匹配是 ...
- noip200805笨小猴
试题描述: 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设maxn是单词中出现次数最 ...