1. 程式人生 > >對hadoop原始碼進行編譯

對hadoop原始碼進行編譯

hadoop編譯

前期準備

軟體需要

  1. 部署JAVA環境
  2. 安裝maven
  3. 安裝Protocol Buffer 2.5.0
  4. 安裝Findbugs(可選

軟體安裝

安裝maven

  1. 下載解壓maven的安裝包
[[email protected] software]$ pwd
/home/hadoop/software
[
[email protected]
software]$ wget https://archive.apache.org/dist/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz [[email protected] software]$ tar -xzvf apache-maven-3.3.3-bin.tar.gz -C /home/hadoop/app/ 備註:開始用maven的tar.gz型別壓縮包的時候,一直有點小問題,後來重新下載了maven的zip型別的壓縮包,問題突然解決了,我也不太清楚和壓縮型別是否有關聯,也可能是操作不慎,小夥伴可以留意一下
  1. 配置全域性環境變數
[[email protected] software]$  exit
[[email protected] ~]$  vi /etc/profile
export MAVEN_HOME=/home/hadoop/app/apache-maven-3.3.3
export PATH=$MAVEN_HOME/bin:$PATH
[[email protected] ~]$  source /etc/profile
[[email protected] ~]$ mvn -version (驗證生效)

安裝ProtocolBuffer 2.5.0

  1. 下載解壓protobuf-2.5.0
[[email protected] software]$ rz (官網下載的版本里面缺少東西,比如後面configure這個資料夾就沒有,所以從其他地方找的壓縮包上傳的)
[[email protected] software]$ tar -xzvf protobuf-2.5.0.tar.gz -C /home/hadoop/app/

  1. 對protobuf-2.5.0進行編譯
[[email protected] ~]# yum install -y gcc gcc-c++ make cmake
[[email protected] ~]# yum install -y autoconf automake libtool curl make g++ unzip
[[email protected] software]$ cd ../app/protobuf-2.5.0
[[email protected] protobuf-2.5.0]$ ./configure --prefix=/home/hadoop/app/protobuf(指定編譯之後的安裝路徑,目錄不需要自己去建立,編譯過程中會自動建立)
[[email protected] protobuf-2.5.0]$  make && make install (進行安裝)

安裝完之後:
[[email protected] app]$ ll -d protobuf/
drwxrwxr-x. 5 hadoop hadoop 4096 Nov 30 19:06 protobuf/  (已經自動新建了一個資料夾)
  1. 配置全域性環境變數
[[email protected] ~]# vi /etc/profile
export PROTOC_HOME=/home/hadoop/app/protobuf
export PATH=$PROTOC_HOME/bin:$PATH
[[email protected] ~]# source /etc/profile
[[email protected] ~]# protoc  --version
libprotoc 2.5.0  (安裝成功)

安裝其他依賴包

  1. 為了支援native,我們需要手動去安裝支援這些壓縮的本地庫
[[email protected] ~]# yum install -y openssl openssl-devel svn ncurses-devel zlib-devel libtool
[[email protected] ~]# yum install -y snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop autoconf automake

保險起見,再次執行下面的語句,確保都已經下載好了包
[[email protected] ~]# yum install -y snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop autoconf automake

對hadoop進行編譯

  1. 因為我之前已經安裝好了hadoop-2.6.0-cdh5.7.0這個版本,所以裡面已經安裝好了相關的hive sqoop等軟體,不想再重新安裝一次,我就採用了另一種方法。對hadoop-2.7.4-src.tar.gz 這個版本進行原始碼編譯,編譯完成之後把它的下面的native cp(在當前機器編譯)或者scp(在另一臺機器編譯)到hadoop-2.6.0-cdh5.7.0這個版本下面的lib下面,取代其native。這樣也是有效,選擇2.7.4這個版本的原因是因為官方文件中推薦的穩定版本就是這個,所以考慮到其不會出現軟體相容性的問題,當然我覺得也可以就用cdh的這個src的壓縮包編譯也是可以,不過本人沒試,好奇的小夥伴可以自行嘗試。操作步驟如下:
[[email protected] hadoop-2.7.4-src]# pwd (進去到src解壓後的檔案裡去進行mav的編譯)
/opt/hadoop-2.7.4-src
[[email protected] hadoop-2.7.4-src]# mvn clean package -Pdist,native -DskipTests -Dtar(一開始使用這個命令一直報錯)
[[email protected] hadoop-2.7.4-src]# mvn clean package -DskipTests -Pdist,native -Dtar -Dsnappy.lib=/opt/ -Dbundle.snappy  (後來通過檢視部落格把命令改為這樣,執行成功)
執行成功後,hadoop-2.7.4-src家目錄下面的hadoop-dist/target/hadoop-2.6.5.tar.gz即為新生成的二進位制安裝包,hadoop-dist/target/hadoop-2.6.5 下面有一個lib/native/,把這個native scp到hadoop001這臺機器上,發現hadoop001這臺機器的cdh版本就有了壓縮格式啦
[[email protected] hadoop-2.7.4-src]# scp -r native 192.168.2.65:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/lib/
之後記得要修改native的使用者使用者組為hadoop

驗證:
[[email protected] hadoop-2.6.0-cdh5.7.0]$ hdfs dfs -ls / (日誌已經沒有了警告標示)
[[email protected] hadoop-2.6.0-cdh5.7.0]$ hadoop checknative
18/12/01 13:37:36 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
Native library checking:
hadoop:  true /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/lib/native/libhadoop.so
zlib:    true /lib64/libz.so.1
snappy:  true /usr/lib64/libsnappy.so.1
lz4:     true revision:99
bzip2:   true /lib64/libbz2.so.1
openssl: true /usr/lib64/libcrypto.so
至此發現編譯當前機器的cdh版本已經支援了壓縮格式,搞定~

參考文件

  1. 文件1
  2. 文件2
  3. 文件3
  4. 文件4
  5. 文件5
  6. GitHub官方的hadoop原始碼
  7. maven的原始碼壓縮包
  8. hadoop2.7.4版本的原始碼壓縮包