Hadoop 3实战指南
上QQ阅读APP看书,第一时间看更新

1.3 阅读Hadoop源码

作为一名Hadoop管理员或者研发人员,为了在遇到问题时能够快速定位问题,或者使自己的程序能够更好地与Hadoop融合,就必须了解Hadoop的内部原理及架构。深入了解一个开源项目的方法有很多种,比如阅读相关图书、博客,但这些只能作为一种辅助手段或者入门方法。要想更加深入地了解或者熟悉其最新架构,需要自己去阅读源码。

Hadoop作为一个经典的开源项目,其本身的代码组成较为复杂,代码量较大,直接阅读较为困难,此时搭建一个源码阅读环境进行代码跟踪就很有必要了,这样可以方便理解代码逻辑。本节就来介绍一下如何搭建一个可用的源码阅读环境,以及如何进行断点调试代码和单元测试。

说明

个人建议IDE使用IntelliJ IDEA,本节也是以它作为代码编辑工具。

从官网上下载源码包hadoop-3.2.0-src.tar.gz,导入IDEA。具体步骤为打开IDEA,单击Open,选择源码所在的目录,我的Hadoop源码所在目录为/Users/user/tmp/hadoop-3.2.0-src,如图1-4所示。

图1-4 导入Hadoop源码

IDEA会自动识别Maven项目,这里要注意一下项目中的文件夹有没有蓝色方块标识以及Java文件显示图标,成功导入的目录结构如图1-5所示。

图1-5 成功导入的目录结构

如果没有图1-5中的这些标识,就说明Maven配置没有被识别,此时需要在Maven Projects选项中单击“刷新”按钮,以识别项目的Maven配置,构建项目所需的依赖环境,如图1-6所示。

图1-6 刷新Maven项目

如果只想简单地跟踪代码以了解某个功能或者函数的实现逻辑,则可以跳过本节中剩下的内容,继续看后面的章节。当你看代码陷入困境,想要通过断点调试代码或者运行一个单元测试时,仅凭上面的环境是无法满足的,因此下面将介绍一个完整的阅读环境。如果要运行Hadoop中的单元测试,由于有一些依赖类是不存在的,需要通过proto命令生成,因此在运行单元测试之前,需要先生成这些依赖类,具体的生成方式有如下两种。

  • 利用proto命令对proto文件生成对应的Java类,命令为protoc test.proto –java_out=/tmp,其中test.proto是要生成Java文件的proto文件,--java_out指定了Java文件的输出目录。
  • 编译Hadoop。

这里推荐使用第二种方式,因为需要生成的proto文件较多,第二种方式简单粗暴、一劳永逸,而且编译Hadoop是一项不可或缺的技能。