在CentOS-x86_64位機器下編譯hadoop-2.2.0源碼?

Tags: 目錄, 源碼, 機器,

在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

在CentOS-x86_64位機器下編譯hadoop-2.2.0源碼

如果已安裝,則跳過,如果沒有安裝,用命令: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”

在CentOS-x86_64位機器下編譯hadoop-2.2.0源碼

使配置生效:

# source /etc/profile

驗證是否安裝成功:

# mvn –version

若打印以下圖相關信息,則成功:

在CentOS-x86_64位機器下編譯hadoop-2.2.0源碼

三、安裝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

在CentOS-x86_64位機器下編譯hadoop-2.2.0源碼

四、下載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

在CentOS-x86_64位機器下編譯hadoop-2.2.0源碼

編譯源碼:

$ mvn package -Pdist,native -DskipTests –Dtar --不生成文檔

$ mvn package -Pdist,native,docs,src -DskipTests –Dtar --生成文檔,需要安裝findbugs,並設置FINDBUGS_HOME環境變量

編譯的時間比較久,編譯過程中會聯網下載所需要的包,機子沒聯網是不會成功編譯的。

編譯結束,最後打印的信息如下,每一項均是‘SUCCESS’,則編譯成功:

在CentOS-x86_64位機器下編譯hadoop-2.2.0源碼

編譯好的代碼包在/usr/release-2.2.0/hadoop-dist/target目錄下:

$ cd /usr/release-2.2.0/hadoop-dist/target

$ ls –la

在CentOS-x86_64位機器下編譯hadoop-2.2.0源碼

因為是在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文件中,添加以下內容:

org.mortbay.jetty

jetty-util

test

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

相關問題答案