Hadoop2源码分析-准备篇

1.概述

  我们已经能够搭建一个高可用的Hadoop平台了,也熟悉并掌握了一个项目在Hadoop平台下的开发流程,基于Hadoop的一些套件我们也能够使用,并且能利用这些套件进行一些任务的开发。在Hadoop的应用级别上,我们接着往后面去研究学习,那就是Hadoop的源码了,作为Hadoop开发人员,我们得去学习和研究Hadoop得实现原理,底层框架的设计,编码的实现过程等等,下面就开始我们今天的Hadoop源码分析之旅。

2.准备

  在分析源码之前,我们需要准备好分析源码的环境,以及如何去分析(分析的方法)。

2.1基础环境

  本系列分析的源码是基于Hadoop-2.6.0-src,源码下载地址如下:

http://apache.osuosl.org/hadoop/common/hadoop-2.6.0/hadoop-2.6.0-src.tar.gz

  JDK使用的是Oracle的JDK1.7,下载地址如下:

  • Windows版下载地址:
http://download.oracle.com/otn-pub/java/jdk/7u75-b13/jdk-7u75-windows-x64.exe
  • Linux版下载地址:
http://download.oracle.com/otn-pub/java/jdk/7u75-b13/jdk-7u75-linux-x64.tar.gz
  • Mac OS X版下载地址:
http://download.oracle.com/otn-pub/java/jdk/7u75-b13/jdk-7u75-macosx-x64.dmg

2.2操作系统

  目前主流的3种操作系统,Windows,Linux,Mac OS X;下面依次来说明不同环境下的配置。

  • Windows

  直接安装下的 jdk-7u75-windows-x64.exe 文件,一路默认安装即可,安装完成后在 cmd 下输入 java -verison 若显示对应的版本好,即表示安装成功。若出现 “java 不是内部或外部命令”的错误提示,可在 Windows 的环境变量下设置JAVA_HOME,和PATH以及CLASSPATH等环境变量即可。如下图所示:

  注:例外还需要Maven环境,和Linux壳,下载IDE(下面Mac OS X环境中提供的IDE,Windows也可以使用),这里不做赘述。

  • Linux

  Linux采用的是CentOS 6,由于Linux自带JDK,本文使用的Oracle的JDK,故我们先卸载系统自带的JDK,安装我们下载好的 jdk-7u75-linux-x64.tar.gz,具体步骤命令如下:

# 卸载自带JDKrpm -qa | grep java
yum -y remove java*

  在使用rpm -qa | grep java命令,查找JDK信息,若没有则表示卸载完成。接着是安装下载好的JDK,首先是解压并创建目录,命令如下所示:

tar -zxvf  jdk-7u75-linux-x64.tar.gz
mkdir -p /usr/java && mv  jdk-7u75-linux-x64 /usr/java/jdk1.7

  然后配置环境变量,内容如下:

export JAVA_HOME=/usr/java/jdk1.7
export PATH=$PATH:$JAVA_HOME/bin

  然后输入命令让环境变量立即生效,命令如下:

. /etc/profile

  接着,我们输入:java -version 验证即可。

  注:Linux环境下同样需要配置Maven环境,IDE可以使用下面Mac OS X的IDE。

  • Mac OS X

  Mac系统下面直接安装下载好的dmg文件,安装文件路径如图所示:

  验证截图:

  安装Maven环境:

  下载地址如下所示:

  maven下载

  安装命令如下所示:

$ cd /usr/local
$ sudo mv /Users/dengjie/Downloads/apache-maven-3.2.3-bin.tar.gz ./
$ sudo tar -xvf apache-maven-3.2.3-bin.tar.gz

  配置:

$ vi /etc/profile
#Add below lines in the profile
export M2_HOME=/usr/local/apache-maven-3.2.3
export PATH=$PATH:$M2_HOME/bin
#save and quit
$ . /etc/profile

  验证截图:

  IDE

  IDE使用Redhat公司推出的JBoss Studio(Eclipse的升级版),下载地址如下:

  JBoss Developer Studio 8.0.0.GA

3.源码准备

 Hadoop2的源码分析,整个流程都是基于Mac OS X系统下来完成的。Linux系统基本配置可以参考Mac OS X配置,Windows系统IDE可以使用JBoss Studio(需要Windows系统下安装JDK)。

 首先我们来预览一下Hadoop-2.6.0-src的源码目录结构,如下图所示:

3.1项目构建

  分析hadoop2源码的方式有2种,一种方式是使用maven结构来分析阅读Hadoop的源码,另一种方式使用一般的Java Project来分析阅读。首先先赘述下一般的Java Project创建Hadoop的源码分析工程。如下图所示:

  • Java Project

  在完成Hadoop的源码导入后,我们还需要添加一些依赖 jar 包,在直接在Hadoop-2.6.0的share/hadoop目录下将依赖包取出添加到IDE环境变量。如下图所示:

  另外,若需要的依赖 jar 不存在,可在Hadoop共享的Maven仓库去下载对应的依赖 jar,下载地址:

http://maven.outofmemory.cn/org.apache.hadoop/
  • Maven结构

  若使用Maven结构,可直接导入Hadoop的源码文件,Hadoop-2.6.0-src工程就算Maven结构的。导入过程如下图所示:

  

  在点击 Finish 按钮后,会根据 pom.xml 文件中的依赖下载对应的 jar 到本地Maven仓库,首次导入需要下载的依赖 jar 包较多,时间会有点长,请耐心等待下载完成。

4.总结

  整个Hadoop2源码的项目导入完成后,将近有100子项目,由于项目文件较多,在分析阅读的时候需要认真谨慎。在导入Hadoop2源码到IDE中的时候,项目结构我给出了2种方式:一般的Java Project结构和Maven结构,当然这个是可以根据自己实际情况来考虑,若是对Maven结构不熟悉的同学,可以直接使用一般的Java Project工程结构来分析Hadoop2的源码,这个是不影响学习源码分析的;若是对Maven结构敢兴趣,也可自行使用Maven结构来学习源码分析。

5.结束语

  这篇Hadoop2源码分析的准备篇就和大家分享到这里,若是在大家在学习研究的过程中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

时间: 2024-10-25 13:35:20

Hadoop2源码分析-准备篇的相关文章

Hadoop2源码分析-YARN RPC 示例介绍

1.概述 之前在<Hadoop2源码分析-RPC探索实战>一文当中介绍了Hadoop的RPC机制,今天给大家分享关于YARN的RPC的机制.下面是今天的分享目录: YARN的RPC介绍 YARN的RPC示例 截图预览 下面开始今天的内容分享. 2.YARN的RPC介绍 我们知道在Hadoop的RPC当中,其主要由RPC,Client及Server这三个大类组成,分别实现对外提供编程接口.客户端实现及服务端实现.如下图所示: 图中是Hadoop的RPC的一个类的关系图,大家可以到<Hado

Hadoop2源码分析-HDFS核心模块分析

1.概述 这篇博客接着<Hadoop2源码分析-RPC机制初识>来讲述,前面我们对MapReduce.序列化.RPC进行了分析和探索,对Hadoop V2的这些模块都有了大致的了解,通过对这些模块的研究,我们明白了MapReduce的运行流程以及内部的实现机制,Hadoop的序列化以及它的通信机制(RPC).今天我们来研究另一个核心的模块,那就是Hadoop的分布式文件存储系统——HDFS,下面是今天分享的内容目录: HDFS简述 NameNode DataNode 接下来,我们开始今天的分享

Android事件传递机制详解及最新源码分析——ViewGroup篇

在上一篇<Android事件传递机制详解及最新源码分析--View篇>中,详细讲解了View事件的传递机制,没掌握或者掌握不扎实的小伙伴,强烈建议先阅读上一篇. 好了,废话还是少说,直奔主题,开始本篇的ViewGroup事件传递机制探索之旅. 依然从简单的Demo例子现象开始分析 新建安卓工程,首先自定义一个Button以及一个RelativeLayout,很简单,只是重写了主要与事件传递机制相关的方法,代码如下: 自定义WLButton类: 1 public class WLButton e

JUC源码分析-集合篇(三)ConcurrentLinkedQueue

JUC源码分析-集合篇(三)ConcurrentLinkedQueue 在并发编程中,有时候需要使用线程安全的队列.如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使用非阻塞算法.使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现.非阻塞的实现方 式则可以使用循环 CAS 的方式来实现.本节让我们一起来研究一下 Doug Lea 是如何使用非阻塞的方式来实现线程安全队列 ConcurrentLinkedQueue 的,相信从大师

JUC源码分析-集合篇(五)BlockingQueue 阻塞式队列实现原理

JUC源码分析-集合篇(五)BlockingQueue 阻塞式队列实现原理 以 LinkedBlockingQueue 分析 BlockingQueue 阻塞式队列的实现原理. 1. 数据结构 LinkedBlockingQueue 和 ConcurrentLinkedQueue 一样都是由 head 节点和 last 节点组成,每个节点(Node)由节点元素(item)和指向下一个节点(next)的引用组成,节点与节点之间就是通过这个 next 关联起来,从而组成一张链表结构的队列.默认情况下

JUC源码分析-集合篇(七)PriorityBlockingQueue

JUC源码分析-集合篇(七)PriorityBlockingQueue PriorityBlockingQueue 是带优先级的无界阻塞队列,每次出队都返回优先级最高的元素,是二叉树最小堆的实现. PriorityBlockingQueue 数据结构和 PriorityQueue 一致,而线程安全性使用的是 ReentrantLock. 1. 基本属性 // 最大可分配队列容量 Integer.MAX_VALUE - 8,减 8 是因为有的 VM 实现在数组头有些内容 private stati

Hadoop2源码分析-Hadoop V2初识

1.概述 在完成分析Hadoop2源码的准备工作后,我们进入到后续的源码学习阶段.本篇博客给大家分享,让大家对Hadoop V2有个初步认识,博客的目录内容如下所示: Hadoop的渊源 Hadoop V2部分项目图 各个包的功能介绍 本篇文章的源码是基于Hadoop-2.6.0来分析,其他版本的Hadoop的源码可以此作为参考分析. 2.Hadoop的渊源 其实,早年Google的核心竞争力是它的计算平台,Google对外公布的论文有一下内容: GoogleCluster Chubby GFS

Spring 事务源码分析——Hibernate篇

在Spring与Hibernate整合的时候,可以利用Spring的事务管理机制,为我们管理事务的开启.提交.回滚等操作.这样的方式极大的减少了我们的代码量,让我们只专注于业务代码的编写.在使用Hibernate的时候,每一个操作都要经历事务开启与提交这样的操作,他们在业务代码的周围,这样来看是不是就想到了AOP编程,把这部分代码抽取出来.没错,Spring正是这样做的,Spring的事务管理就是基于AOP的. 1 Spring的事务隔离与传播 Srping的事务定义了五个隔离等级(isolat

gcc 源码分析-前端篇1

前年写了 gcc源码分析,感觉写的不好,如果没有源代码读起来很痛苦,基本上是读天书,这一次改了一种写法,用另一种思路来写,希望这一次能好一点: 1.基本数据结构 编译器前端主要的任务就是把输入的源码转换成一棵语法树, 在gcc中,树的每一个节点用一个结构体来表示,下面就来谈一谈gcc中用到的这个结构体: union tree_node { struct tree_common common; struct tree_identifier identifier; struct tree_list