64位os下為啥要編譯hadoop就不解釋了,百度一下就能知道原因,下面是步驟:
前提:編譯源碼所在的機器,必須能上網,否則建議不要嘗試了
一. 下載必要的組件
a) 下載hadoop源碼 (當前最新的穩定版是2.6.0)
地址 http://mirrors.hust.edu.cn/apache/hadoop/common/stable/hadoop-2.6.0-src.tar.gz
b) 下載apache-ant (centos自帶的ant版本太低,編譯過程中會報錯)
地址: http://mirrors.cnnic.cn/apache//ant/binaries/apache-ant-1.9.4-bin.zip (最新版本即可)
c) 下載protobuf-2.5.0.tar.gz (這是google出品的一個數據傳輸格式)
地址: https://developers.google.com/protocol-buffers/docs/downloads (官網地址要翻!牆!,百度上也能找到國內下載地址)
注意:hadoop2.6.0必須配protobuf 2.5.0版本,版本不匹配,編譯將失敗
d) 下載findbugs
地址: http://prdownloads.sourceforge.net/findbugs/findbugs-3.0.1.tar.gz?download (最新版本即可)
e) 下載maven
地址: http://maven.apache.org/download.cgi (下載最新版即可,本文中用的是3.2.5)
f) 下載jdk
地址:這個比較容易找,大家自己去oracle官網找着,jdk1.6 及以上(本文用的是1.7)
二. 設置環境變量
(下面三種方式任選其一即可)
sudo vi /etc/profile
vi ~/.bashrc
vi ~/.bash_profile
上面3個命令隨便用哪個,進入vi編輯器后,參考下面的內容設置環境變量:
(注: 下面的$ JAVA _ HOME部分,博客發表后,好象博客園會自動變成其它格式,正確內容參考圖片)
export ANT_HOME=/home/cargo/apache-ant-1.9.4
export FINDBUGS_HOME=/home/cargo/findbugs-3.0.1
export JAVA_HOME=/home/cargo/jdk1.7.0_76
export M2_HOME=/home/cargo/apache-maven-3.2.5
export PATH=$JAVA_HOME/bin:$PATH:$HOME/bin:$M2_HOME/bin:$ANT_HOME/bin:$FINDBUGS_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
編譯過程中,maven會從互聯網下載很多jar包,強烈建議在局域網搭建一個nexus私服, 另外建議修改maven/conf/settings.xml文件,參考內容如下:

1 <?xml version="1.0" encoding="UTF-8"?> 2 <settings xmlns=" http://maven.apache.org/SETTINGS/1.0.0" 3 xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation=" http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> 5 6 <localRepository>/home/cargo/m2</localRepository> 7 8 <mirrors> 9 <mirror> 10 <id>nexus</id> 11 <mirrorOf>*</mirrorOf> 12 <url> http://172.21.129.57:8081/nexus/content/groups/public/</url> 13 </mirror> 14 </mirrors> 15 16 <profiles> 17 <profile> 18 <id>nexus</id> 19 <repositories> 20 <repository> 21 <id>nexus</id> 22 <name>Nexus</name> 23 <url> http://172.21.129.57:8081/nexus/content/groups/public/</url> 24 <releases><enabled>true</enabled></releases> 25 <snapshots><enabled>true</enabled></snapshots> 26 </repository> 27 </repositories> 28 <pluginRepositories> 29 <pluginRepository> 30 <id>nexus</id> 31 <name>Nexus</name> 32 <url> http://172.21.129.57:8081/nexus/content/groups/public/</url> 33 <releases><enabled>true</enabled></releases> 34 <snapshots><enabled>true</enabled></snapshots> 35 </pluginRepository> 36 </pluginRepositories> 37 </profile> 38 </profiles> 39 <activeProfiles> 40 <activeProfile>nexus</activeProfile> 41 </activeProfiles> 42 43 </settings>
<localRepository>/home/cargo/m2</localRepository> 這里設置一個下載jar包的本機倉庫目錄,通常編譯不會很順利,如果因網絡問題下載jar包失敗,下次再運行安裝時, 需要手動清空本地倉庫的緩存,指定一個好記的目錄,清理起來比較方便
上面這一堆弄好后,驗證一下:
驗證ant,輸入anv -version,正常應該反饋以下類似信息:
Apache Ant(TM) version 1.9.4 compiled on April 29 2014
驗證maven,輸入mvn -version,正常應該反饋以下類似信息:
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-15T01:29:23+08:00)
Maven home: /home/cargo/apache-maven-3.2.5
Java version: 1.7.0_76, vendor: Oracle Corporation
Java home: /home/cargo/jdk1.7.0_76/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-431.23.3.el6.x86_64", arch: "amd64", family: "unix"
三.安裝必要的軟件
sudo yum -y install gcc*
sudo yum -y install cmake
sudo yum -y install glibc-headers
sudo yum -y install gcc-c++
sudo yum -y install zip-devel
sudo yum -y install openssl-devel
sudo yum -y install svn
sudo yum -y install git
sudo yum -y install ncurses-devel
sudo yum -y install lzo-devel
sudo yum -y install autoconf
sudo yum -y install libtool
sudo yum -y install automake
這一堆東西都裝上吧,省得編譯過程中提示少這個,少那個
四.配置\安裝protobuf
進入protobuf所在目錄,然后按下面順序操作
./configure
make
make check
sudo make install
五.編譯hadoop
進入hadoop源代碼目錄,輸入
mvn clean package -DskipTests -Pdist,native -Dtar
上面這行命令大意是先清理target目錄,再打包,同時跳過測試,應用dist,native這2種profile,且最終目標是生成tar包
首次編譯一般不會成功(視人品而定),下面是可能會遇到的一些問題:
a) maven-enforcer-plugin規則驗證失敗
編輯源代碼根目錄下的pom.xml,找到maven-enforcer-plugin所在的部分
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.3.1</version>
<configuration>
<rules>
<requireMavenVersion>
<version>[3.0.2,)</version>
</requireMavenVersion>
<requireJavaVersion>
<version>1.7</version>
</requireJavaVersion>
</rules>
</configuration>
</plugin>
注意紅色部分,原來的值是1.6,即規定了使用jdk1.6,如果本機安裝的jdk是1.7,這里相應改一下
b)maven-antrun-plugin各種報錯
同樣嘗試修改pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.9.4</version>
</dependency>
</dependencies>
</plugin>
紅色這一部分是原來沒有的,可以嘗試加上再試試,其中ant依賴項的版本號,調整成本機實際的ant版本號
c) org.slf4j系列jar包找不到的問題
hadoop所依賴的org.slf4j這一系列的Jar包版本都特別低,如果maven無法自動從互聯網下載成功,可以手動根據出錯信息,到網上下載這些jar包,然后放到本地倉庫的相關目錄
d) apache-tomcat-6.0.41.tar.gz 下載太卡的問題
[get] Getting: http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.41/bin/apache-tomcat-6.0.41.tar.gz
[get] To: /home/cargo/hadoop-2.6.0-src/hadoop-common-project/hadoop-kms/downloads/apache-tomcat-6.0.41.tar.gz
到這一步時,如果下載失敗,可以手動下載這個包,然后放到 hadoop-2.6.0-src/hadoop-common-project/hadoop-kms/downloads/ 目錄下
e)內存不足
export MAVEN_OPTS="Xms256m -Xmx512m"
把這一行加到最開始設置環境變量的文件最后即可
tips: 如果人品不好,上面這些招數用盡后,仍然各種報錯,可以嘗試把maven命令調整成
mvn compile -DskipTests -Pdist,native -Dtar
即先不打包,僅編譯
在編譯的漫長等待中,強烈建議大家讀一下源代碼目錄下的BUILDING.TXT文件,這里面大概描述了各種平台(MAC OS/WINDOWS/LINUX)下的編譯主要步驟,祝各位編譯順利!
歷經千辛萬苦編譯成功后,hadoop-2.6.0-src/hadoop-dist/target 這個目錄下會生成編譯結果