天天看點

Hadoop2.x源碼-編譯剖析1.概述2.編譯準備3.總結4.結束語

  最近,有小夥伴涉及到源碼編譯。然而,在編譯期間也是遇到各種坑,在求助于搜尋引擎,技術部落格,也是難以解決自身所遇到的問題。筆者在被詢問多

次的情況下,今天打算為大家來寫一篇文章來剖析下編譯的細節,以及遇到編譯問題後,應該如何去解決這樣類似的問題。因為,編譯的問題,對于後期業務拓展,

二次開發,編譯打包是一個基本需要面臨的問題。

  在編譯源碼之前,我們需要準備編譯所需要的基本環境。下面給大家列舉本次編譯的基礎環境,如下所示:

硬體環境

作業系統

centos6.6

cpu

i7

記憶體

16g

硬碟

閃存

核數

4核

軟體環境

jdk

1.7

maven

3.2.3

ant

1.9.6

protobuf

2.5.0

  在準備好這些環境之後,我們需要去将這些環境安裝到作業系統當中。步驟如下:

  關于jdk,maven,ant的安裝較為簡單,這裡就不多做贅述了,将其對應的壓縮包解壓,然後在/etc/profile檔案當中添加對應

的路徑到path中即可。下面筆者給大家介紹安裝protobuf,其安裝需要對protobuf進行編譯,故我們需要編譯的依賴環境gcc、gcc-

c++、cmake、openssl-devel、ncurses-devel,安裝指令如下所示:

 驗證gcc是否安裝成功,指令如下所示:

Hadoop2.x源碼-編譯剖析1.概述2.編譯準備3.總結4.結束語

  驗證make核cmake是否安裝成功,指令如下所示:

Hadoop2.x源碼-編譯剖析1.概述2.編譯準備3.總結4.結束語

  在準備完這些環境之後,開始去編譯protobuf,編譯指令如下所示:

 ps:這裡安裝的時候有可能提示權限不足,若出現該類問題,使用sudo進行安裝。

  驗證protobuf安裝是否成功,指令如下所示:

Hadoop2.x源碼-編譯剖析1.概述2.編譯準備3.總結4.結束語

  下面,我們開始進入編譯環境,在編譯的過程當中會遇到很多問題,大家遇到問題的時候,要認真的去分析這些問題産生的原因,這裡先給大家列舉一些

可以避免的問題,在使用maven進行編譯的時候,若使用預設的jvm參數,在編譯到hadoop-hdfs子產品的時候,會出現溢出現象。異常資訊如下所

示:

  這裡,我們在編譯hadoop源碼之前,可以先去環境變量中設定其參數即可,内容修改如下:

  接下來,我們進入到hadoop的源碼,這裡筆者使用的是hadoop2.6的源碼進行編譯,更高版本的源碼進行編譯,估計會有些許差異,編譯指令如下所示:

  ps:這裡筆者是直接将其編譯為檔案夾,若需要編譯成tar包,可以在後面加上tar的參數,指令為 mvn package -dskiptests -pdist,native -dtar

  筆者在編譯過程當中,出現過在編譯kms子產品時,下載下傳tomcat不完全的問題,hadoop采用的tomcat是apache-

tomcat-6.0.41.tar.gz,若是在此子產品下出現異常,可以使用一下指令檢視tomcat的檔案大小,該檔案正常大小為6.9m左右。檢視

指令如下所示:

  若出現隻有幾k的tomcat安裝包,表示tomcat下載下傳失敗,我們将其手動下載下傳到/home/hadoop/tar/hadoop-2.6.0-

src/hadoop-common-project/hadoop-kms/downloads目錄下即可。在編譯成功後,會出現以下資訊:

  在編譯完成之後,會在hadoop源碼的dist目錄下生成編譯好的檔案,如下圖所示:

Hadoop2.x源碼-編譯剖析1.概述2.編譯準備3.總結4.結束語

  圖中hadoop-2.6.0即表示編譯好的檔案。

  在編譯的過程當中,會出現各種各樣的問題,有些問題可以借助搜尋引擎去幫助我們解決,有些問題搜尋引擎卻難以直接的給出解決方案,這時,我們需

要冷靜的分析編譯錯誤資訊,大膽的去猜測,然後去求證我們的想法。簡而言之,解決問題的方法是有很多的。當然,大家也可以在把遇到的編譯問題,貼在評論下

方,供後來者參考或借鑒。

  這篇文章就和大家分享到這裡,如果大家在研究和學習的過程中有什麼疑問,可以加群進行讨論或發送郵件給我,我會盡我所能為您解答,與君共勉!