设为首页 收藏本站
查看: 1449|回复: 0

[经验分享] hadoop源代码组织结构与阅读技巧

[复制链接]

尚未签到

发表于 2015-7-11 09:55:14 | 显示全部楼层 |阅读模式
  本文将介绍在 Eclipse 下阅读 Hadoop 源代码的一些技巧, 比如如何查看一个基类有哪些派生类、 一个方法被其他哪些方法调用等。
  本文地址:http://www.iyunv.com/archimedes/p/study-hadoop-sourcecode.html,转载请注明源地址。
  欢迎关注我的个人博客:www.wuyudong.com, 更多云计算与大数据的精彩文章
1 . 查看一个基类或接口的派生类或实现类
  在 Eclipse 中, 选中 某个基类或接口名称,右击,在弹出 的快捷菜单中选择“ Quick Type Hierarchy”, 可在新窗口中看到对应的所有派生类或实现类。
  例如, 打开 src\mapred\ 目 录下 org.apache.hadoop.mapred 包中的 InputFormat.java 文件, 查看接口 InputFormat 的所有实现类
DSC0000.jpg
  在 Eclipse 中查看 Hadoop 源代码中接口 InputFormat 的所有实现类
  结果如下所示:
DSC0001.jpg
2. 查看函数的调用关系
  在 Eclipse 中, 选中某个方法名称, 右击,在弹出的快捷菜单中选择“Open CallHierarchy”, 可在窗口“Call Hierarchy” 中看到所有调用该方法的函数。
例如,如 图所示,打开src\mapred\ 目录下org.apache.hadoop.mapred 包中的JobTracker.java 文件, 查看调用方法 initJob 的所有函数,
DSC0002.jpg
  在 Eclipse 中查看 Hadoop 源代码中所有调用 JobTracker.java 中 initJob 方法的函数
DSC0003.jpg
  Eclipse 列出所有调用 initJob 方法的函数
3. 快速查找类对象的相关信息
  同前两个技巧类似, 选中类对象, 右击, 在弹出的快捷菜单中选择“ Open Declaration”,可跳转到类定义 ; 选择“ Quick Outline”, 可查看类所有的成员变量和成员方法。
这里就不再赘述
4. Hadoop 源代码组织结构
  直接解压 Hadoop 压缩包后, 可看到图 1 -11 所示的目 录结构,
DSC0004.jpg
  其中, 比较重要的目录有 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 源代码组织结构,如图所示:
DSC0005.jpg
总体上看, 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架构设计与实现原理》
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-85426-1-1.html 上篇帖子: hadoop中的DistributedCache 2 下篇帖子: 《Hadoop高级编程》之为Hadoop实现构建企业级安全解决方案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表