一、 為什麼要編譯Hadoop源碼
Hadoop是使用Java語言開發的,但是有一些需求和操作并不适合使用java,是以就引入了本地庫(Native Libraries)的概念,通過本地庫,Hadoop可以更加高效地執行某一些操作。
native目錄是本地庫,位于hadoop-2.x.x/lib/native目錄下,僅支援linux和unix作業系統。
hadoop中的zlib和gzip子產品會加載本地庫,如果加載失敗,會提示:
16/07/06 12:18:24 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
可以在core-site.xml中配置hadoop.native.lib值是否使用本地庫,預設值為true。
官方提供的hadoop-2.x版本中,native檔案都是32位編譯的,在實際使用64位環境中,為了能讓Hadoop更高效地運作,最好還是在本地編譯Hadoop源碼,用本地編譯好的本地庫(native目錄)替換官方安裝包裡自帶的本地庫。
二、 編譯源碼的環境要求
1、 必須在Linux下進行
2、 Java JDK必須為1.6以上
3、 Maven 版本必須為3.0以上
4、 安裝Findbugs插件,版本1.3.9
5、 安裝CMake編譯工具,版本2.6
6、 安裝zlib devel
7、 安裝openssl devel
8、 編譯時必須可以連接配接網際網路,因為需要yum下載下傳軟體。
三、 用到的軟體包
1、 apache-maven-3.0.5-bin.tar.gz
2、 cmd_markdown_win64.zip
3、 findbugs-1.3.9.tar.gz
4、 hadoop-2.5.0-src.tar.gz
5、 jdk-7u67-linux-x64.tar.gz
6、 native-2.5.0.tar.gz
7、 protobuf-2.5.0.tar.gz
四、 Hadoop2.x源碼編譯步驟
1、 解壓Hadoop源碼安裝包
(1) [[email protected] sofeware]$ tar -zxf hadoop-2.5.0-src.tar.gz -C /opt/modules/
(2) 檢視是否已經解壓成功
[[email protected] sofeware]$ ll /opt/modules/
total 12
drwxr-xr-x. 11 hadoop hadoop 4096 Jul 4 17:48 hadoop-2.5.0
drwxr-xr-x 15 hadoop hadoop 4096 Aug 7 2014 hadoop-2.5.0-src
2、 解壓JDK
(1) [[email protected] sofeware]$ tar -zxf jdk-7u67-linux-x64.tar.gz -C /opt/modules/
(2) 檢視是否已經解壓成功
[[email protected] sofeware]$ ll /opt/modules/
total 12
drwxr-xr-x. 11 hadoop hadoop 4096 Jul 4 17:48 hadoop-2.5.0
drwxr-xr-x 15 hadoop hadoop 4096 Aug 7 2014 hadoop-2.5.0-src
drwxr-xr-x. 8 hadoop hadoop 4096 Jul 26 2014 jdk1.7.0_67
3、 root使用者配置Java JDK環境變量
(1) root使用者進入/etc/profile檔案
[[email protected] sofeware]$ vim /etc/profile
(2) 配置JDK_HOME和PATH
export JAVA_HOME="/opt/modules/jdk1.7.0_67"
export PATH=$JAVA_HOME/bin:$PATH
(3) 生效配置檔案
[[email protected] sofeware]$ source /etc/profile
(4) 确認Jave配置成功
[[email protected] sofeware]$ java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
4、 root使用者安裝Maven
(1) Apache Maven,是一個軟體項目管理及自動建構工具。Maven完成項目生命周期的所有階段,包括驗證、代碼生成、編譯、測試、打包、內建測試、安裝、部署、以及項目網站建立和部署。maven的好處在于可以将項目過程規範化、自動化、高效化以及強大的可擴充性。
對于需要的依賴,Maven可以從配置的遠端倉庫裡按需自動下載下傳到本地倉庫
(2) 解壓Maven
[[email protected] sofeware]$ tar -zxf apache-maven-3.0.5-bin.tar.gz -C /opt/modules/
(3) 配置/etc/profile檔案
export MAVEN_HOME="/opt/modules/apache-maven-3.0.5"
export PATH=$MAVEN_HOME/bin:$PATH
(4) 生效配置檔案
[[email protected] sofeware]# source /etc/profile
(5) 确認Maven配置成功
[[email protected] sofeware]# mvn -version
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 21:51:28+0800)
Maven home: /opt/modules/apache-maven-3.0.5
Java version: 1.7.0_67, vendor: Oracle Corporation
Java home: /opt/modules/jdk1.7.0_67/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-504.el6.x86_64", arch: "amd64", family: "unix"
5、 root使用者安裝gcc/gcc-c++/make
[[email protected] sofeware]# yum -y install gcc gcc-c++
接下來yum自動安裝,直到安裝成功會顯示Complete!
6、 普通使用者下安裝protobuf
(1) [[email protected] sofeware]$ tar -zxf protobuf-2.5.0.tar.gz -C /opt/modules/
(2) [[email protected] sofeware]$ /opt/modules/protobuf-2.5.0/configure --prefix=/usr/local/protoc
(3) [[email protected] sofeware]$ cd /opt/modules/protobuf-2.5.0
(4) [[email protected] protobuf-2.5.0]# make
(5) [[email protected] protobuf-2.5.0]# make install
(6) 配置/etc/profile
export PROTOBUF_HOME="/usr/local/protoc"
export PATH=$PROTOBUF_HOME/bin:$PATH
(7) 生效配置檔案
[[email protected] sofeware]# source /etc/profile
(8) 确認配置成功
[[email protected] protobuf-2.5.0]# protoc --version
libprotoc 2.5.0
7、 root使用者下下載下傳安裝CMake、openssl、ncurses
(1) 安裝Cmake
[[email protected] protobuf-2.5.0]# yum -y install cmake
(2) 安裝openssl
[[email protected] protobuf-2.5.0]# yum install openssl-devel
(3) 安裝ncurses
[[email protected] protobuf-2.5.0]# yum -y install ncurses-devel
8、 添加maven鏡像
(1) 編輯maven配置檔案settings.xml
[[email protected] apache-maven-3.3.3]$ vim /opt/modules/apache-maven-3.3.3/conf/settings.xml
(2) 添加鏡像
<mirror> <id>nexus-osc</id> <mirrorOf>*</mirrorOf> <name>Nexus osc</name> <url>http://maven.oschina.net/content/groups/public</url> </mirror> |
9、 編譯Hadoop源碼
(1) 切換到普通使用者:[[email protected] protobuf-2.5.0]# su hadoop
(2) 進入hadoop源碼目錄:[[email protected] protobuf-2.5.0]$ cd /opt/modules/hadoop-2.5.0-src/
(3) 執行編譯,編譯過程中需要從yum倉庫下載下傳依賴包,需要一段時間
[[email protected] hadoop-2.5.0-src]$ mvn package –DskipTests –Pdist,native
(4) 執行過程中如果報錯,發現是下載下傳依賴失敗,可以換個apache的maven鏡像位址後能夠正常下載下傳。
https://repo.maven.apache.org/maven2
10、 編譯後,将native目錄替換之前安裝的hadoop lib目錄下的native目錄。
(1) 将編譯後的native目錄覆寫本地原有的native目錄
[[email protected] hadoop-2.5.0-src]$ cp -R /opt/modules/hadoop-2.5.0-src/hadoop-dist/target/hadoop-2.5.0/lib/native/* /opt/modules/hadoop-2.5.0/lib/native/
(2) 進入${HADOOP_HOME}目錄啟動HDFS
[[email protected] hadoop-2.5.0-src]$ cd ${HADOOP_HOME}
[[email protected] hadoop-2.5.0]$ sbin/hadoop-daemon.sh start namenode
[[email protected] hadoop-2.5.0]$ sbin/hadoop-daemon.sh start datanode
(3) 執行dfs指令就不會有警告了
[[email protected] hadoop-2.5.0]$ bin/hdfs dfs -ls /