本文将介绍如何使用 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 进行远程连接调试了

【深入浅出 Yarn 架构与实现】1-2 搭建 Hadoop 源码阅读环境的更多相关文章

  1. Mac搭建Hadoop源码阅读环境

    1.本次Hadoop源码阅读环境使用的阅读工具是idea,Hadoop版本是2.7.3.需要安装的工具包括idea.jdk.maven.protobuf等 2.jdk,使用的版本是1.8版,在jdk官 ...

  2. 利用IDEA搭建JDK源码阅读环境

    利用IDEA搭建JDK源码阅读环境 首先新建一个java基础项目 基础目录 source 源码 test 测试源码和入口 准备JDK源码 下图框起来的路径就是jdk的储存位置 打开jdk目录,找到sr ...

  3. Hadoop源码阅读环境搭建(IDEA)

    拿到一份Hadoop源码之后,经常关注的两件事情就是 1.怎么阅读?涉及IDEA和Eclipse工程搭建.IDEA搭建,选择源码,逐步导入即可:Eclipse可以选择后台生成工程,也可以选择IDE导入 ...

  4. win7+idea+maven搭建spark源码阅读环境

    1.参考. 利用IDEA工具编译Spark源码(1.60~2.20) https://blog.csdn.net/He11o_Liu/article/details/78739699 Maven编译打 ...

  5. 搭建 Spring 源码阅读环境

    前言 有一个Spring源码阅读环境是学习Spring的基础.笔者借鉴了网上很多搭建环境的方法,也尝试了很多,接下来总结两种个人认为比较简便实用的方法.读者可根据自己的需要自行选择. 方法一:搭建基础 ...

  6. Spring源码分析_01_ idea搭建spring源码阅读环境

    二.参考资料 1.Intellij Idea如何导入spring源码

  7. Sping学习笔记(一)----Spring源码阅读环境的搭建

    idea搭建spring源码阅读环境 安装gradle Github下载Spring源码 新建学习spring源码的项目 idea搭建spring源码阅读环境 安装gradle 在官网中下载gradl ...

  8. 基于Eclipse搭建Hadoop源码环境

    Hadoop使用ant+ivy组织工程,无法直接导入Eclipse中.本文将介绍如何基于Eclipse搭建Hadoop源码环境. 准备工作 本文使用的操作系统为CentOS.需要的软件版本:hadoo ...

  9. 基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建

    基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建 作者:Awesome 日期:2017-10-21 需准备的软件工具 Ardupilot飞控源码 PX4 toolchain JAVA ...

随机推荐

  1. MongoDB,入门看这一篇足矣!

    一.介绍 在介绍 MongoDB 之前,我先介绍一下业务开发的时候遇到的痛点,以便大家对它有一个更加清晰的认识! 最近在用数据库存储数据的时候发现这么一个坑,例如从消息队列中监听消息的时候,原来的做法 ...

  2. 开发个RTMP播放器居然这么难?RTMP播放器对标和考察指标

    好多开发者提到,RTMP播放器,不知道有哪些对标和考察指标,以下大概聊聊我们的一点经验,感兴趣的,可以关注 github: 1. 低延迟:大多数RTMP的播放都面向直播场景,如果延迟过大,严重影响体验 ...

  3. KingbaseES R6 集群主库网卡down测试案例

    数据库版本: test=# select version(); version ------------------------------------------------------------ ...

  4. 【读书笔记】C#高级编程 第二十一章 任务、线程和同步

    (一)概述 所有需要等待的操作,例如,因为文件.数据库或网络访问都需要一定的时间,此时就可以启动一个新的线程,同时完成其他任务. 线程是程序中独立的指令流. (二)Paraller类 Paraller ...

  5. 记一次 .NET 某打印服务 非托管内存泄漏分析

    一:背景 1. 讲故事 前段时间有位朋友在微信上找到我,说他的程序出现了内存泄漏,能不能帮他看一下,这个问题还是比较经典的,加上好久没上非托管方面的东西了,这篇就和大家分享一下,话不多说,上 WinD ...

  6. 关于thinkphp5.1(tp5.1)中sum计算结果不精确、不准确的问题

    使用sprintf函数处理,虽然原理没搞懂,但是问题解决了 复现: test表中有两列,值分别是-0.33和10,数据类型是float SELECT SUM(`val`) AS tp_sum FROM ...

  7. Odoo自建应用初步总结(一)

    学习了<Odoo快速入门与实践 Python开发ERP指南>(刘金亮 2019年5月第1版 机械工业出版社)第6章自建应用入门后进行一下总结. 因为本书作者使用Odoo11,而目前最新版本 ...

  8. 记录一下对jdk8后的接口的一些理解

    对于jdk8后的接口,接口中加入了可以定义默认方法和静态方法. 为什么要这样设计呢? 是为了在给接口扩展方法的时候,不会影响已经实现了该接口的类 加入默认方法可以解决:在添加方法的同时,不影响现有的实 ...

  9. Jenkins和Gitlab CI/CD自动更新k8s中pod使用的镜像说明

    Jenkins 使用Jenkins的话,完成的工作主要有如下步骤: 1.从Gogs或Gitlab仓库上拉取代码 2.使用Maven编译代码,打包成jar文件 3.根据jar文件使用相对应的Docker ...

  10. 一文读懂Apache Geode缓存中间件

    目录 一.对缓存中间件的诉求 1.1 我们为什么需要缓存中间件 1.2 缓存的分类 1.1.1 弱势缓存 1.1.2 强势缓存 二.什么是Apache Geode 2.1 Apache Geode的架 ...