Hadoop入門進階課程2--Hadoop2.X 64位編譯
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,博主為石山園,博客地址為 http://www.rzrgm.cn/shishanyuan 。該系列課程是應邀實驗樓整理編寫的,這里需要贊一下實驗樓提供了學習的新方式,可以邊看博客邊上機實驗,課程地址為 https://www.shiyanlou.com/courses/237
【注】該系列所使用到安裝包、測試數據和代碼均可在百度網盤下載,具體地址為 http://pan.baidu.com/s/10PnDs,下載該PDF文件
1、編譯環境
1.1軟硬件環境說明
所有節點均是CentOS系統,防火墻和SElinux禁用,所有節點上均創建了一個shiyanlou用戶,并在系統根目錄下創建/app目錄,用于存放Hadoop等組件運行包。因為該目錄用于安裝hadoop等組件程序,用戶對shiyanlou必須賦予rwx權限(一般做法是root用戶在根目錄下創建/app目錄,并修改該目錄擁有者為shiyanlou(chown –R shiyanlou:shiyanlou /app)。
Hadoop搭建環境:
l 虛擬機操作系統: CentOS6.6 64位,單核,1G內存
l JDK:1.7.0_55 64位
l Hadoop:1.1.2
1.2環境搭建
1.2.1JDK安裝和Java環境變量配置
1.下載JDK1.7 64bit安裝包
打開JDK1.7 64bit安裝包下載鏈接為:
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
打開界面之后,先選中 Accept License Agreement ,然后下載 jdk-7u55-linux-x64.tar.gz,如下圖所示:
2.創建/app目錄,把該目錄的所有者修改為shiyanlou
sudo mkdir /app
sudo chown -R shiyanlou:shiyanlou /app
3.創建/app/lib目錄,使用命令如下:
mkdir /app/lib
4. 把下載的安裝包解壓并遷移到/app/lib目錄下
cd /home/shiyanlou/install-pack
tar -zxf jdk-7u55-linux-x64.tar.gz
mv jdk1.7.0_55/ /app/lib
ll /app/lib
5.使用sudo vi /etc/profile命令打開配置文件,設置JDK路徑
export JAVA_HOME=/app/lib/jdk1.7.0_55
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
6.編譯并驗證
source /etc/profile
java -version
1.2.2安裝并設置maven
1.下載maven安裝包(建議安裝3.0以上版本)本次安裝選擇的是maven3.0.5的二進制包,下載地址http://mirror.bit.edu.cn/apache/maven/maven-3/ ,也可以在/home/shiyanlou/install-pack目錄中找到該安裝包
2. 解壓縮apache-maven-3.0.5-bin.tar.gz包,并把apache-maven-3.0.5目錄移到/app/lib目錄下
cd /home/shiyanlou/install-pack
tar -zxf apache-maven-3.0.5-bin.tar.gz
mv apache-maven-3.0.5 /app/lib
3.使用sudo vi /etc/profile打開配置文件,并加入maven設置
export MAVEN_HOME=/app/lib/apache-maven-3.0.5
export PATH=$PATH:$MAVEN_HOME/bin
4.編譯/etc/profile文件并驗證配置是否成功:
source /etc/profile
mvn -version
1.2.3使用yum安裝svn
sudo yum install svn
1.2.4使用yum安裝autoconf automake libtool cmake
sudo yum install autoconf automake libtool cmake
1.2.5使用yum安裝ncurses-devel
sudo yum install ncurses-devel
1.2.6使用yum安裝openssl-devel
sudo yum install openssl-devel
1.2.7使用yum安裝gcc*
sudo yum install gcc*
1.2.8安裝并設置protobuf
注:該程序包需要在gcc安裝完畢后才能安裝,否則提示無法找到gcc編譯器。
1.下載protobuf安裝包
下載鏈接為 https://code.google.com/p/protobuf/downloads/list ,也可以在/home/shiyanlou/install-pack目錄中找到該安裝包
2.解壓安裝包并把protobuf-2.5.0目錄轉移到/app/lib目錄下
cd /home/shiyanlou/install-pack
tar -zxf protobuf-2.5.0.tar.gz
mv protobuf-2.5.0 /app/lib
3.進行目錄運行命令
進入目錄運行如下命令:
cd /app/lib/protobuf-2.5.0/
sudo ./configure
sudo make
sudo make check
sudo make install
make過程時間較長,需要運行幾分鐘時間
check結果如下
運行install命令及結果如下
4.驗證是否安裝成功
運行成功之后,通過如下方式來驗證是否安裝成功,如果出現"Missing input file"表示成功安裝protobuf
protoc
2、編譯Hadoop
2.1下載Hadoop源代碼 Release2.2.0
在/app目錄下新建compile子目錄,在該文件夾通過SVN獲取Hadoop2.2.0源代碼,命令如下:
cd /app
mkdir compile
cd compile
svn checkout http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.2.0
獲取時間較長,大小約75.3M
2.2編譯Hadoop源代碼
由于hadoop2.2.0在svn中pom.xml有點問題,會造成編譯中出錯,可先參考3.1修復該問題。在Hadoop源代碼的根目錄執行如下命令:
cd /app/compile/release-2.2.0/
mvn package -Pdist,native -DskipTests –Dtar
(注意:這行命令需要手工輸入,如果復制執行會報異常!)
在編譯過程需要聯網,從網絡中下載所依賴的包,編譯的過程時間根據網速時間不等,一般在30分鐘左右。
編譯好的Hadoop2.X 64位安裝包在hadoop-dist/target目錄中,該文件為hadoop-2.2.2.tar.gz。
2.3驗證編譯是否成功
到 hadoop-dist/target/hadoop-2.2.0/lib/native 目錄中查看libhadoop.so.1.0.0屬性:
cd /app/compile/release-2.2.0/hadoop-dist/target/hadoop-2.2.0/lib/native
file *
該文件為ELF 64-bit LSB則表示文件成功編譯為64位(如果系統沒有file命令,則使用sudo yum install file進行安裝)
3、問題解決
3.1編譯Hadoop2.2.0出現代碼異常
目前的2.2.0 的Source Code 壓縮包解壓出來的code有個bug 需要patch后才能編譯。否則編譯hadoop-auth 會提示下面錯誤:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:testCompile (default-testCompile) on project hadoop-auth: Compilation failure: Compilation failure:
[ERROR] /home/hadoop/Downloads/release-2.2.0/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[88,11] error: cannot access AbstractLifeCycle
[ERROR] class file for org.mortbay.component.AbstractLifeCycle not found
[ERROR] /home/hadoop/Downloads/release-2.2.0/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[96,29] error: cannot access LifeCycle
[ERROR] class file for org.mortbay.component.LifeCycle not found
直接修改hadoop-common-project/hadoop-auth/pom.xml,其實就是少了一個包,添加一個dependency:
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-util</artifactId>
<scope>test</scope>
</dependency>

![clip_image002[4] clip_image002[4]](https://images0.cnblogs.com/blog/107289/201507/082139336111438.jpg)
![clip_image004[4] clip_image004[4]](https://images0.cnblogs.com/blog/107289/201507/082139375805992.jpg)
![clip_image006[4] clip_image006[4]](https://images0.cnblogs.com/blog/107289/201507/082139394715149.jpg)
![clip_image008[4] clip_image008[4]](https://images0.cnblogs.com/blog/107289/201507/082139424554403.jpg)
![clip_image010[4] clip_image010[4]](https://images0.cnblogs.com/blog/107289/201507/082139440967102.jpg)
![clip_image012[4] clip_image012[4]](https://images0.cnblogs.com/blog/107289/201507/082139458469301.jpg)
![clip_image014[4] clip_image014[4]](https://images0.cnblogs.com/blog/107289/201507/082139488141028.jpg)
![clip_image016[4] clip_image016[4]](https://images0.cnblogs.com/blog/107289/201507/082139517524296.jpg)
![clip_image018[4] clip_image018[4]](https://images0.cnblogs.com/blog/107289/201507/082139546437280.jpg)
![clip_image020[4] clip_image020[4]](https://images0.cnblogs.com/blog/107289/201507/082139574869577.jpg)
![clip_image022[4] clip_image022[4]](https://images0.cnblogs.com/blog/107289/201507/082140038777958.jpg)
![clip_image024[4] clip_image024[4]](https://images0.cnblogs.com/blog/107289/201507/082140092216526.jpg)
![clip_image026[4] clip_image026[4]](https://images0.cnblogs.com/blog/107289/201507/082140138468480.jpg)
![clip_image028[4] clip_image028[4]](https://images0.cnblogs.com/blog/107289/201507/082140170189678.jpg)
![clip_image030[4] clip_image030[4]](https://images0.cnblogs.com/blog/107289/201507/082140202688618.jpg)
![clip_image032[4] clip_image032[4]](https://images0.cnblogs.com/blog/107289/201507/082140235336086.jpg)
![clip_image034[4] clip_image034[4]](https://images0.cnblogs.com/blog/107289/201507/082140270806470.jpg)
![clip_image036[4] clip_image036[4]](https://images0.cnblogs.com/blog/107289/201507/082140306276853.jpg)
![clip_image038[4] clip_image038[4]](https://images0.cnblogs.com/blog/107289/201507/082140368144764.jpg)
![clip_image040[4] clip_image040[4]](https://images0.cnblogs.com/blog/107289/201507/082140400336246.jpg)
![clip_image042[4] clip_image042[4]](https://images0.cnblogs.com/blog/107289/201507/082140426277787.jpg)
![clip_image044[4] clip_image044[4]](https://images0.cnblogs.com/blog/107289/201507/082140449559642.jpg)
![clip_image046[4] clip_image046[4]](https://images0.cnblogs.com/blog/107289/201507/082140487214726.jpg)
![clip_image048[4] clip_image048[4]](https://images0.cnblogs.com/blog/107289/201507/082140577058947.jpg)
![clip_image050[4] clip_image050[4]](https://images0.cnblogs.com/blog/107289/201507/082141037684129.jpg)
![clip_image052[4] clip_image052[4]](https://images0.cnblogs.com/blog/107289/201507/082141086744297.jpg)
![clip_image054[4] clip_image054[4]](https://images0.cnblogs.com/blog/107289/201507/082141102052795.jpg)
![clip_image056[4] clip_image056[4]](https://images0.cnblogs.com/blog/107289/201507/082141144867320.jpg)
![clip_image058[4] clip_image058[4]](https://images0.cnblogs.com/blog/107289/201507/082141162211991.jpg)
![clip_image060[4] clip_image060[4]](https://images0.cnblogs.com/blog/107289/201507/082141182834160.jpg)
![clip_image062[4] clip_image062[4]](https://images0.cnblogs.com/blog/107289/201507/082141251897685.jpg)
![clip_image066[4] clip_image066[4]](https://images0.cnblogs.com/blog/107289/201507/082141288467567.jpg)
![clip_image068[4] clip_image068[4]](https://images0.cnblogs.com/blog/107289/201507/082141309243966.jpg)
![clip_image070[4] clip_image070[4]](https://images0.cnblogs.com/blog/107289/201507/082141408146744.jpg)
![clip_image072[4] clip_image072[4]](https://images0.cnblogs.com/blog/107289/201507/082141566892262.jpg)
![clip_image074[4] clip_image074[4]](https://images0.cnblogs.com/blog/107289/201507/082142042215727.jpg)
![clip_image076[4] clip_image076[4]](https://images0.cnblogs.com/blog/107289/201507/082142062362910.jpg)
![clip_image078[4] clip_image078[4]](https://images0.cnblogs.com/blog/107289/201507/082142104865678.jpg)
![clip_image080[4] clip_image080[4]](https://images0.cnblogs.com/blog/107289/201507/082142125181793.jpg)
浙公網安備 33010602011771號