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}这是 ...
随机推荐
- git使用注意点
1. 如果希望在克隆的时候,自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字$ git clone git://github.com/schacon/grit.git mygrit 2. ...
- 《java虚拟机》----java内存模型与线程
No1. No2. java内存模型规定了所有的变量都存储在主内存中(Main Memory)中 每条线程还有自己的工作内存(Working Memory) 线程的工作内存中保存了被该线程使用到的变量 ...
- linux网络管理----网络命令
1 Linux网络命令之网络环境查看命令 ifconfig 2 Linux网络命令之网络测试命令 telnet 基本已经被ssh替代了,telnet是明文传递,不安全
- Django 和 html
下面是对应的形式,自定义的forms
- 【Leetcode】583. Delete Operation for Two Strings
583. Delete Operation for Two Strings Given two words word1 and word2, find the minimum number of st ...
- ElasticSearch6 影响_score的两种方式
影响score两种方式都要用到 function_score 1. field_value_factor "function_score" => [ "query& ...
- 【BJOI2014】大融合【LCT】
闲着没事写篇题解 传送门 LCT维护子树的模板题 树链剖分中,子树可以用dfs序维护.但LCT你总不可能动态维护dfs序啊 LCT之所以不能直接维护子树,是因为LCT只能维护它的重儿子.我们把这棵子树 ...
- MOSFET shunt regulator substitutes for series regulator
You would normally use a series linear regulator or a dc/dc converter to obtain 3V dc from a higher ...
- php中的var_dump()方法的详细说明
首先看看实例: <?PHP$a = "alsdflasdf;a";$b = var_dump($a);echo "<br>";//var_du ...
- 【资料】wod旗帜,纹章
物品 徽章 旗帜 掉落地点 备注 火焰纹章 法师与怪物 火焰魔法.魔法攻防 雄鹰纹章 受诅咒的遗迹 弩系相关 盗贼纹章 捉迷藏 偷袭.匕首.割喉.近攻防 守夜人的纹章 酒馆里平静的一天 钝器.双打.旋 ...