在hadoop官方提供的SVN或FTP目錄下,只有32位的hadoop源碼或編譯包,沒有64位的,如果需要64位的可以在網上下載,但可能還是存在問題,最好的辦法就是在自己的64位系統上進行編譯。
說明:
1、 機器得連網,如果沒聯網找可以聯網的機器下載,但是編譯時還是要下載一些東西,所以,實在不行。最好找相同平臺(可以是虛擬機)能上網的機器做下面工作,弄好了再把編譯好的代碼包拷回來。
2、 下面所有的命令操作中,‘#’開頭的是在root用戶進行,‘$’開頭的是在普通用戶下進行
工具/原料
CentOS-x86_64位系統
保持電腦聯網
一、預先安裝必要軟件
需要的軟件:java, svn, autoconf, automake, libtool, ncurses-devel, openssl-devel, gcc, lzo-devel, zlib-devel, znt, maven, protobuf, cmake
檢測系統中是否已安裝了某一軟件命令:rpm -qa grep 軟件名,如檢測系統中是否安裝了svn:
$ rpm -qa grep svn
如果已安裝,則跳過,如果沒有安裝,用命令:yum install svn進行安裝,如:
$ yum install svn
如果yum命令安裝失敗(找不到相應的包),則需手動下載相應的軟件包進行安裝,比如maven, protobuf這兩個個軟件;
二、安裝maven
軟件包:apache-maven-3.0.5-bin.tar.gz
不要使用最新的Maven3.1.1,與Maven3.0.x存在兼容性問題,所以老是出現java.lang.NoClassDefFoundError: org/sonatype/aether/graph/DependencyFilter之類的錯誤。選擇3.0.5版本:apache-maven-3.0.5-bin.tar.gz
將apache-maven-3.0.5-bin.tar.gz移動到/usr目錄(軟件包所在目錄):
# mv ./apache-maven-3.0.5-bin.tar.gz /usr
進入/usr目錄,解壓(/usr目錄):
# tar –zxvf apache-maven-3.0.5-bin.tar.gz ./
刪除解壓後的壓縮包(/usr目錄):
# rm –rf apache-maven-3.0.5-bin.tar.gz
將/usr / apache-maven-3.0.5/bin加到環境變量中
# vi /etc/profile
在PATH行的最後加上“:/usr/apache-maven-3.0.5/bin”
使配置生效:
# source /etc/profile
驗證是否安裝成功:
# mvn –version
若打印以下圖相關信息,則成功:
三、安裝protobuf
軟件包:protobuf-2.5.0.tar.gz
將protobuf-2.5.0.tar.gz移動到/usr目錄(軟件包所在目錄):
# mv ./ protobuf-2.5.0.tar.gz /usr
進入/usr目錄,解壓(/usr目錄):
# tar –zxvf protobuf-2.5.0.tar.gz ./
刪除解壓後的壓縮包(/usr目錄):
# rm –rf protobuf-2.5.0.tar.gz
進入/usr/protobuf-2.5.0目錄:
# cd /usr/protobuf-2.5.0
依次執行下列命令:
# ./configure
# make
# make check
# make install
檢測是否安裝成功:
# protoc --version
四、下載hadoop-2.2.0源碼並編譯
在/usr目錄進行
用svn下載hadoop-2.2.0源碼,命令:
$ svn checkout ';
源碼下載完成後,在/usr目錄下會有一個release-2.2.0目錄,進入該目錄:
$ cd /usr/release-2.2.0
$ ls –la
編譯源碼:
$ mvn package -Pdist,native -DskipTests –Dtar --不生成文檔
$ mvn package -Pdist,native,docs,src -DskipTests –Dtar --生成文檔,需要安裝findbugs,並設置FINDBUGS_HOME環境變量
編譯的時間比較久,編譯過程中會聯網下載所需要的包,機子沒聯網是不會成功編譯的。
編譯結束,最後打印的信息如下,每一項均是‘SUCCESS’,則編譯成功:
編譯好的代碼包在/usr/release-2.2.0/hadoop-dist/target目錄下:
$ cd /usr/release-2.2.0/hadoop-dist/target
$ ls –la
因為是在64位系統下編譯的,所以編譯出來的代碼包是64位版本的;可以直接將/usr/release-2.2.0/hadoop-dist/target目錄下的hadoop-2.2.0或者hadoop-2.2.0.tar.gz拷貝到其他linux64位平臺進行搭建hadoop集群
五、可能遇到的問題
1、Apache Hadoop Auth ................................ FAILURE
最新的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/chuan/trunk/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[84,13] cannot access org.mortbay.component.AbstractLifeCycle[ERROR] class file for org.mortbay.component.AbstractLifeCycle not found
在Apache Hadoop Auth 這一步會失敗:
[INFO] Apache Hadoop Auth ................................ FAILURE [9.266s]
[INFO] Apache Hadoop Auth Examples ....................... SKIPPED
……
……
解決辦法:
根據補丁Patch :https://issues.apache.org/jira/browse/HADOOP-10110 所述:
在 /usr/release-2.2.0/hadoop-common-project/hadoop-auth/pom.xml文件中,添加以下內容:
2、[INFO] Apache Hadoop Pipes ...............................FAILURE [5.295s]
編譯Pipes失敗,報錯信息:
[INFO] Apache Hadoop Pipes ...............................FAILURE [5.295s]
[INFO] Apache Hadoop Tools Dist.......................... SKIPPED
……
一般是未安裝ncurses-devel, openssl-devel造成
解決辦法:
# yum install ncurses-devel
# yum install openssl-devel