本文将介绍如何使用 idea 搭建 Hadoop 源码阅读环境。(默认已安装好 Java、Maven 环境)

一、搭建源码阅读环境

一)idea 导入 hadoop 工程

从 github 上拉取代码。
https://github.com/apache/hadoop
可以选择对应的分支

# 如拉取 2.8.5 分支
git clone -b branch-2.8.5 git@github.com:apache/hadoop.git

在 idea 中点击 File - Open 选择对应的文件夹目录,进行导入。之后会进入漫长的程序加载过程(看机器配置和网速,可能几十分钟到几小时不等)。

二)配置注释环境

为了更方便的在阅读源码过程中记笔记,可在源码基础上创建新的分支用于记录。
1、创建新分支

# 如在 branch-2.8.5 基础上创建
git checkout -b branch-2.8.5-comment

2、在 github 上创建个新的项目
3、将本地分支 branch-2.8.5-comment 推送到远端。之后可以在自己 github 上看到这个项目分支了。

# 删除原来的远端项目
git remote remove origin
# 添加新的项目地址
git remote add origin <你的项目地址>
# 推送新的分支
git push -u origin branch-2.8.5-comment

二、源码组织架构

一)根目录结构

导入工程后,可以看到如下图的目录结构。其中,比较重要的目录有:hadoop-common-projecthadoop-mapreduce- projecthadoop-hdfs-projecthadoop-yarn-project 等。

  • hadoop-common-project:Hadoop 基础库所在目录,该目录中包含了其他所有模块可能会用到的基础库,包括 RPC、Metrics、Counter 等;
  • hadoop-mapreduce-project:MapReduce 框架的实现;
  • hadoop-hdfs-project:Hadoop 分布式文件系统实现;
  • hadoop-yarn-project:Hadoop 资源管理系统 YARN 实现,是我们需要重点关注的部分。

二)yarn 目录结构

Hadoop YARN 主要关注五个部分:API、Common、Applications、Client 和 Server。

  • YARN API:给出了 YARN 内部涉及 RPC 协议的 Java 声明和 Protocol Buffers 定义;
  • YARN Common:包含了 YARN 底层库实现, 包括事件库、服务库、状态机库、Web 界面库等;
  • YARN Applications:包含了两个 Application 编程实例,分别是 distributedshell 和 Unmanaged AM;
  • YARN Client:该部分封装了几个与 YARN RPC 协议交互相关的库,方便用户开发应用程序;
  • YARN Server:该部分给出了 YARN 的核心实现,包括 ResourceManager、NodeManager、资源管理器等核心组件的实现。

三、远程调试

配置与远程部署的 hadoop 服务连接。
1、idea 中选择 Run -> Edit Configurations

# 在 yarn-env.sh 中添加
export YARN_NODEMANAGER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006"
export YARN_RESOURCEMANAGER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005" # 如果想要启动时先连接 debug,则设置 suspend=y

4、可以用 idea 进行远程连接调试了

最新文章

  1. Atitit 函数式编程与命令式编程的区别attilax总结 &#160;qbf
  2. iOS蓝牙开发(二)蓝牙相关基础知识
  3. 集合Hashtable Dictionary Hashset
  4. uiscrollerview循环滚动(参考第三方库:HMBannerView)https://github.com/iunion/autoScrollBanner
  5. [原博客] POJ 2505 A multiplication game 组合游戏
  6. jquery实现当前页面编辑
  7. 基于内容的自适应变长编码[CAVLC]
  8. java中内存结构及堆栈详解
  9. Android N多窗口支持
  10. openwrt下 samba设置
  11. Vue.js03:v-model实现简易计算器
  12. (转)通过注册表修改VC6.0的字体
  13. Ubuntu 16.04.2 配置VNC
  14. KMSpico 无后门下载
  15. Flutter Android 真机调试指南
  16. mybatis+oracle实现简单的模糊查询
  17. Singer 学习五 docker 运行说明
  18. php原样输出被编译过的html(适用于一些保存编辑器的内容)
  19. NC 日志文件注册
  20. 使用nginx反向代理处理前后端跨域访问

热门文章

  1. window桌面背景图片
  2. kingbaseES R3 集群配置 SSL
  3. KingbaseES 如何把一个schema下的所有对象访问权限授权给其他用户
  4. 使用Dockfile构建mysql镜像与初始化运行mysql容器
  5. 【Vue学习笔记】—— vue的基础语法 { }
  6. centos7换清华源
  7. [Python]-sklearn.model_selection模块-处理数据集
  8. 基于koa模块和socket.io模块搭建的node服务器实现通过jwt 验证来渲染列表、私聊、群聊功能
  9. ConcurrentDictionary&lt;T,V&gt; 的这两个操作不是原子性的
  10. 第六章:Django 综合篇 - 15:Django与缓存