1. 程式人生 > >Hadoop2原始碼分析-準備篇

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,具體步驟命令如下:

# 解除安裝自帶JDK
rpm -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環境:

下載地址如下所示:

  安裝命令如下所示:

$ 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的升級版),下載地址如下:

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原始碼分析的準備篇就和大家分享到這裡,若是在大家在學習研究的過程中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!

相關推薦

Hadoop2原始碼分析準備

1.概述   我們已經能夠搭建一個高可用的Hadoop平臺了,也熟悉並掌握了一個專案在Hadoop平臺下的開發流程,基於Hadoop的一些套件我們也能夠使用,並且能利用這些套件進行一些任務的開發。在Hadoop的應用級別上,我們接著往後面去研究學習,那就是Hadoop的原始碼了,作為Hadoop開發人員,我

Hadoop2原始碼分析MapReduce v2架構

1.概述   前面我們已經對Hadoop有了一個初步認識,接下來我們開始學習Hadoop的一些核心的功能,其中包含mapreduce,fs,hdfs,ipc,io,yarn,今天為大家分享的是mapreduce部分,其內容目錄如下所示: MapReduce V1 M

React Fiber原始碼分析 第三(非同步狀態)

先附上流程圖~       呼叫setState時, 會呼叫classComponentUpdater的enqueueSetState方法, 同時將新的state作為payload引數傳進 enqueueSetState會先呼叫requestCurrentTime獲

Android事件分發機制原始碼分析之Activity

在之前的事件分發分析中,曾提及到View的事件是由ViewGroup分發的,然而ViewGroup的事件我們只是稍微帶過是由Activity分發的。而我們知道,事件產生於使用者按下螢幕的一瞬間,事件生成後,經過一系列的過程來到我們的Activity層,那麼事件是怎樣從Activity傳遞

libevent原始碼分析鎖和多執行緒

寫在前面: ​ 這個原始碼是分析libevent-2.0.20-stable, 並非最新版本的libevent,作者並沒有全看原始碼,在這裡會推薦以下參考的一些網站,也歡迎大家在不足的地方提出來進行討論。 鎖 ​ libevent的內部實現不需要多執行緒,

Spring Cloud原始碼分析之Eureka第六章:服務註冊

在文章《Spring Cloud原始碼分析之Eureka篇第四章:服務註冊是如何發起的 》的分析中,我們知道了作為Eureka Client的應用啟動時,在com.netflix.discovery.DiscoveryClient類的initScheduledT

Spring Cloud原始碼分析之Eureka第八章:服務註冊名稱的來歷

關於服務註冊名稱 服務註冊名稱,是指Eureka client註冊到Eureka server時,用於標記自己身份的標誌,舉例說明,以下是個簡單的Eureka client配置: server: port: 8082 spring: applicatio

Eureka原始碼分析-環境構建

     承接上一篇文章《什麼是微服務》,我們已經對微服務有一定了解,並且以一個實現了註冊中心、服務提供者及消費者的例子作為文章的結尾,而本篇文章,主要介紹Eureka原始碼的環境構建及示例除錯。 

Android觸控式螢幕事件派發機制詳解與原始碼分析三(Activity)

PS一句:最終還是選擇CSDN來整理髮表這幾年的知識點,該文章平行遷移到CSDN。因為CSDN也支援MarkDown語法了,牛逼啊! 【工匠若水 http://blog.csdn.net/yanbober】 該篇承接上一篇《Android觸控式螢幕事件派發機制詳解與原始碼分析

Android觸控式螢幕事件派發機制詳解與原始碼分析二(ViewGroup)

【工匠若水 http://blog.csdn.net/yanbober】 該篇承接上一篇《Android觸控式螢幕事件派發機制詳解與原始碼分析一(View篇)》,閱讀本篇之前建議先閱讀。當然,閱讀完這一篇之後可以閱讀繼續進階的下一篇《Android觸控式螢幕事件派發機制詳解與原始碼

Android觸控式螢幕事件派發機制詳解與原始碼分析一(View)

【工匠若水 http://blog.csdn.net/yanbober】 Notice:閱讀完該篇之後如果想繼續深入閱讀Android觸控式螢幕事件派發機制詳解與原始碼分析下一篇請點選《Android觸控式螢幕事件派發機制詳解與原始碼分析二(ViewGroup篇)》檢視。 1

騰訊效能監控框架Matrix原始碼分析之第一

騰訊效能監控框架Matrix原始碼分析之第一篇 概述 前幾天騰訊將一款Android應用效能監控的框架matrix開源了,原始碼地址在github.com/Tencent/mat…,作者是微信終端團隊。matrix到底是什麼?據官方說法如下: Matrix 是一款微信研發並日常使用的 APM(Applic

Spring Cloud原始碼分析之Eureka第五章:更新服務列表

在上一章《Spring Cloud原始碼分析之Eureka篇第四章:服務註冊是如何發起的 》,我們知道了作為Eureka Client的應用啟動時,在com.netflix.discovery.DiscoveryClient類的initScheduledTask

python實習生準備

宣告:本人所創作之文,都是基於實踐、探索過程中的心得、體會,並把過程文字化而以,編寫文章不會過於修飾,乾澀難懂的地方在所難免。 學習一門技術、語言,都是基於以下幾步來實踐而以: 第一:安裝配置環境 第二:編寫Helloword程式 第三:嘗試以目標驅動進

【kubernetes/k8s原始碼分析】kubelet原始碼分析statusManager與probeManager

簡介    在 kubelet 初始化的時候,會NewMainKubelet函式中建立 statusManager 和 probeManager。    statusManager 負責維護狀態資訊,並把 pod 狀態更新到 apiserver,但是不負責監控 pod 狀

Kubernetes Node Controller原始碼分析之執行

Author: [email protected] 摘要:我認為,Node Controller是Kubernetes幾十個Controller中最為重要的Controller之一,其重要程度在Top3,然而這可能也是最為複雜的一個Contr

UPX原始碼分析——加殼

本文屬於i春秋原創文章現金獎勵計劃,未經許可嚴禁轉載。 0x00 前言UPX作為一個跨平臺的著名開源壓縮殼,隨著Android的興起,許多開發者和公司將其和其變種應用在.so庫的加密防護中。雖然針對UPX及其變種的使用和脫殼都有教程可查,但是至少在中文網路裡並沒有針對其原始

spring原始碼分析controller的執行緒安全

大家都知道,struts1.2由於是執行緒安全的,每一個請求都去例項化一個action,造成大量併發時的資源浪費。   struts2在這一點上做了改進,每個action都是一個singleton,所有的請求都是請求同一個action例項。這樣在一定程度上能節約資源,但又有

深入淺出Mybatis系列(一)---Mybatis原始碼分析環境準備

Mybatis原始碼分析環境準備 原始碼下載地址: https://blog.mybatis.org/p/products.

Envoy 原始碼分析LDS

Envoy 原始碼分析--LDS LDS 是 Envoy 用來自動獲取 listener 的 API。 Envoy 通過 API 可以增加、修改或刪除 listener。 先來總結下 listener 的更新語義如下: 每個 listener 必須有一個唯一的名稱。如果沒有提供名稱,Envoy 會生成一個