Hadoop2.2.0源碼編譯
一、安裝CentOS6.5
下載地址是:http://www.centoscn.com/CentosSoft/iso/,注意是64位的,大小是4GB,需要下載一段時間的。其實6.x的版本都可以,不一定是6.5。我使用的是VMWare虛擬機,分配了2GB內存,20GB磁盤空間。內存太小,會比較慢;磁盤太小,編譯時可能會出現空間不足的情況。上述不是最低配置,根據自己的機器配置修改吧。還有,一定要保持linux聯網狀態。
注:以下是下載安裝各種軟件,我把軟件下載後全部複製到/usr/local/app/目錄下;注意下載各軟件包的版本及安裝路徑。
二、下載必要的組件
1、 下載hadoop-2.2.0源碼
地址: https://archive.apache.org/dist/hadoop/common/hadoop-2.2.0/
選擇:hadoop-2.2.0-src.tar.gz
2、下載apache-ant
(centos自帶的ant版本太低,編譯過程中會報錯)
地址:http://archive.apache.org/dist/ant/binaries/
選擇:apache-ant-1.9.4-bin.tar.gz
3、下載protobuf-2.5.0.tar.gz
(這是google出品的一個數據傳輸格式) 地址: https://developers.google.com/protocol-buffers/docs/downloads (官網地址要翻!牆!,百度上也能找到國內下載地址) 注意:hadoop2.6.0必須配protobuf 2.5.0版本,版本不匹配,編譯將失敗
4、下載findbugs
地址:http://sourceforge.net/projects/findbugs/files/findbugs/3.0.0/
選擇:findbugs-3.0.0.tar.gz
5、下載maven
地址:http://maven.apache.org/download.cgi
選擇:apache-maven-3.0.5-bin.tar.gz
6、下載jdk
地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
選擇:Java SE Development Kit 7u45 ――〉 jdk-7u45-linux-x64.tar.gz
三、安裝各組件
1. 安裝JDK
1.1 解壓縮:tar -zxvf jdk-7u45-linux-x64.tar.gz
1.2 重命名:mv jdk1.7.0_45 jdk
1.3 設置環境變量:
1.3.1 進入文件:vi /etc/profile
1.3.2 在文件中新增內容: export JAVA_HOME=/usr/local/app/jdk
export PATH=.:$PATH:$JAVA_HOME/bin
1.4保存退出文件後,執行以下命令:
source /etc/profile
1.5 驗證:java -version
2. 安裝maven
2.1 解壓縮:tar -zxvf apache-maven-3.0.5-bin.tar.gz
2.2 重命名:mv apache-maven-3.0.5 maven
2.3 設置環境變量:
2.3.1 進入文件:vi /etc/profile
2.3.2 在文件中新增內容: export MAVEN_HOME=/usr/local/app/maven
修改: export PATH=.:$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
2.4 保存退出文件後,執行以下命令:
source /etc/profile
2.5 驗證:mvn -version
3、安裝ant
3.1 解壓縮:tar -zxvf apache-ant-1.9.4-bin.tar.gz
3.2 重命名:mv apache- ant-1.9.4 ant
3.3 設置環境變量:
3.3.1 進入文件:vi /etc/profile
3.3.2 在文件中新增內容: export ANT_HOME=/usr/local/app/ant
修改: export PATH=.:$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:$ANT_HOME/bin
3.4 保存退出文件後,執行以下命令:
source /etc/profile
3.5 驗證:ant -version
4、安裝findbugs(可選步驟)
4.1 解壓縮:tar -zxvf findbugs-3.0.0.tar.gz
4.2 重命名:mv findbugs-3.0.0 findbugs
4.3 設置環境變量:
4.3.1 進入文件:vi /etc/profile
4.3.2 在文件中新增內容: export FINDBUGS_HOME=/usr/local/app/findbugs
修改: export PATH=.:$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:$ANT_HOME/bin:$ FINDBUGS_HOME/bin:$FINDBUGS_HOME/bin
4.4 保存退出文件後,執行以下命令:
source /etc/profile
4.5 驗證:findbugs -version
5、安裝protoc
5.1 準備:hadoop使用protocol buffer通信,爲了編譯安裝protoc,需要下載幾個工具,順序執行以下命 令:
yum install gcc
yum intall gcc-c++
yum install make
注:如果操作系統是CentOS6.5那麼gcc和make已經安裝了。其他版本不一定。在命令運行時,需要用戶經常輸入“y”。
5.2 解壓縮:tar -zxvf protobuf-2.5.0.tar.gz
5.3 重命名:mv protobuf-2.5.0 protobuf
5.4 進入protobuf 目錄:cd protobuf
順序執行命令:
./configure --prefix=/usr/local/protoc/
make && make install
5.5 設置環境變量:
5.4.1 進入文件:vi /etc/profile
5.4.2 在文件中新增內容: export PROTOC_HOME=/usr/local/app/protoc
修改:export PATH=.:$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:$ANT_HOME/bin:$ FINDBUGS_HOME/bin:$FINDBUGS_HOME/bin:$PROTOC_HOME/bin
5.6保存退出文件後,執行以下命令:
source /etc/profile
5.7 驗證:protoc --version
6、安裝其他依賴
順序執行以下命令
yum install cmake
yum install openssl-devel
yum install ncurses-devel
安裝完畢即可。
四、編譯hadoop2.2源碼
1、解壓縮
tar -zxvf hadoop-2.2.0-src.tar.gz
2、bug修改
2.1 源代碼中有個bug,這裏需要修改一下,編輯目錄/usr/local/app/hadoop-2.2.0-src /hadoop-common-project/hadoop-auth中的文件pom.xml
執行以下命令
gedit pom.xml
2.2在第55行下增加以下內容
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-util</artifactId>
<scope>test</scope>
</dependency>
保存退出即可。
2.3上述bug詳見https://issues.apache.org/jira/browse/HADOOP-10110,在hadoop3中修復了,離 我們太遙遠了。
3、編譯源碼:
3.1 好了,現在進入到目錄cd /usr/local/app/hadoop-2.2.0-src中,執行命令:
mvnpackage -DskipTests -Pdist,native,docs
3.2 如果沒有執行第4步,把上面命令中的docs去掉即可,就不必生成文檔了。
該命令會從外網下載依賴的jar,編譯hadoop源碼,需要花費很長時間,你可以吃飯了。
在等待n久之後,可以看到如下的結果:
[INFO] Apache Hadoop Main................................ SUCCESS [6.936s]
[INFO] Apache Hadoop Project POM......................... SUCCESS [4.928s]
[INFO] Apache Hadoop Annotations......................... SUCCESS [9.399s]
[INFO] Apache Hadoop Assemblies.......................... SUCCESS [0.871s]
[INFO] Apache Hadoop Project Dist POM.................... SUCCESS [7.981s]
[INFO] Apache Hadoop Maven Plugins....................... SUCCESS [8.965s]
[INFO] Apache Hadoop Auth ................................SUCCESS [39.748s]
[INFO] Apache Hadoop Auth Examples....................... SUCCESS [11.081s]
[INFO] Apache Hadoop Common.............................. SUCCESS [10:41.466s]
[INFO] Apache Hadoop NFS................................. SUCCESS [26.346s]
[INFO] Apache Hadoop Common Project...................... SUCCESS [0.061s]
[INFO] Apache Hadoop HDFS................................ SUCCESS [12:49.368s]
[INFO] Apache Hadoop HttpFS.............................. SUCCESS [41.896s]
[INFO] Apache Hadoop HDFS BookKeeper Journal............. SUCCESS [41.043s]
[INFO] Apache Hadoop HDFS-NFS............................ SUCCESS [9.650s]
[INFO] Apache Hadoop HDFS Project........................ SUCCESS [0.051s]
[INFO] hadoop-yarn .......................................SUCCESS [1:22.693s]
[INFO] hadoop-yarn-api................................... SUCCESS [1:20.262s]
[INFO] hadoop-yarn-common................................ SUCCESS [1:30.530s]
[INFO] hadoop-yarn-server................................ SUCCESS [0.177s]
[INFO] hadoop-yarn-server-common......................... SUCCESS [15.781s]
[INFO] hadoop-yarn-server-nodemanager.................... SUCCESS [40.800s]
[INFO] hadoop-yarn-server-web-proxy...................... SUCCESS [6.099s]
[INFO] hadoop-yarn-server-resourcemanager................ SUCCESS [37.639s]
[INFO] hadoop-yarn-server-tests.......................... SUCCESS [4.516s]
[INFO] hadoop-yarn-client................................ SUCCESS [25.594s]
[INFO] hadoop-yarn-applications ..........................SUCCESS [0.286s]
[INFO] hadoop-yarn-applications-distributedshell......... SUCCESS [10.143s]
[INFO] hadoop-mapreduce-client........................... SUCCESS [0.119s]
[INFO] hadoop-mapreduce-client-core...................... SUCCESS [55.812s]
[INFO] hadoop-yarn-applications-unmanaged-am-launcher.... SUCCESS [8.749s]
[INFO] hadoop-yarn-site.................................. SUCCESS [0.524s]
[INFO] hadoop-yarn-project............................... SUCCESS [16.641s]
[INFO] hadoop-mapreduce-client-common.................... SUCCESS [40.796s]
[INFO] hadoop-mapreduce-client-shuffle................... SUCCESS [7.628s]
[INFO] hadoop-mapreduce-client-app....................... SUCCESS [24.066s]
[INFO] hadoop-mapreduce-client-hs ........................SUCCESS [13.243s]
[INFO] hadoop-mapreduce-client-jobclient................. SUCCESS [16.670s]
[INFO] hadoop-mapreduce-client-hs-plugins................ SUCCESS [3.787s]
[INFO] Apache Hadoop MapReduce Examples.................. SUCCESS [17.012s]
[INFO] hadoop-mapreduce.................................. SUCCESS [6.459s]
[INFO] Apache Hadoop MapReduce Streaming................. SUCCESS [12.149s]
[INFO] Apache Hadoop Distributed Copy.................... SUCCESS [15.968s]
[INFO] Apache Hadoop Archives............................ SUCCESS [5.851s]
[INFO] Apache Hadoop Rumen............................... SUCCESS [18.364s]
[INFO] Apache Hadoop Gridmix............................. SUCCESS [14.943s]
[INFO] Apache Hadoop Data Join ...........................SUCCESS [9.648s]
[INFO] Apache Hadoop Extras.............................. SUCCESS [5.763s]
[INFO] Apache Hadoop Pipes............................... SUCCESS [16.289s]
[INFO] Apache Hadoop Tools Dist.......................... SUCCESS [3.261s]
[INFO] Apache Hadoop Tools............................... SUCCESS [0.043s]
[INFO] Apache Hadoop Distribution........................ SUCCESS [56.188s]
[INFO] Apache Hadoop Client.............................. SUCCESS [10.910s]
[INFO] Apache Hadoop Mini-Cluster........................ SUCCESS [0.321s]
[INFO]------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO]------------------------------------------------------------------------
[INFO] Total time: 40:00.444s
[INFO] Finished at: Thu Dec 26 12:42:24 CST 2013
[INFO] Final Memory: 109M/362M
[INFO]------------------------------------------------------------------------
3.3好了,編譯完成了。編譯後的代碼在/usr/local/app/hadoop-2.2.0-src/hadoop-dist/target下面。