天天看點

hadoop64位編譯

官方提供的hadoop-2.x版本貌似都是32位的,在64位機子下使用可能會報錯,最好使用官方提供的源碼進行本地編譯,編譯成适合本地硬體環境的64位軟體包。

關于native

  Hadoop是使用Java語言開發的,但是有一些需求和操作并不适合使用java,是以就引入了本地庫(Native Libraries)的概念,通過本地庫,Hadoop可以更加高效地執行某一些操作。

  native位于hadoop-2.x.x/lib/native目錄下,僅支援linux和unix作業系統。

  hadoop中的zlib和gzip子產品會加載本地庫,如果加載失敗,會提示: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位環境中,建議本地編譯後再使用。

  參考:http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/NativeLibraries.html

編譯步驟

  本次編譯環境:CentOS 5.5 + jdk7 + hadoop-2.6.0-src.tar.gz。為了加快編譯過程,盡量将CentOS的記憶體設定的大一些,還有,編譯過程中CentOS必須保持連網狀态。

1、安裝JDK、maven、findbugs(可選步驟)

  實驗版本:jdk-7u75-linux-x64.tar.gz、apache-maven-3.0.5-bin.tar.gz、findbugs-3.0.0.tar.gz,分别解壓到/usr/local目錄下,然後配置環境變量:vi /etc/profile,配置内容如下:

export JAVA_HOME=/usr/local/jdk1_75
export MAVEN_HOME=/usr/local/apache-maven-/
export FINDBUGS_HOME=/usr/local/findbugs-/
export PATH=.:$MAVEN_HOME/bin:$JAVA_HOME/bin:$FINDBUGS_HOME/bin:$PATH
   驗證:① java -version;② mvn -version;③ findbugs -version。
           

2、安裝protoc

   protoc buffer是hadoop的通信工具,編譯過程需要安裝。實驗版本:protobuf-.tar.gz,官網:https://code.google.com/p/protobuf/downloads/list。

   安裝編譯工具:① yum install -y gcc;② yum intall -y gcc-c++;③ yum install -y make,作業系統已安裝的不必重複安裝。

   進入/usr/local,順序執行指令:① tar -zxvf protobuf-.tar.gz;② cd protobuf-;③ ./configure --prefix=/usr/local/protoc/;④ make && make install。

   安裝完成後,配置環境變量,增加:export PROTOC_HOME=/usr/local/protoc/,和export PATH=..:$PROTOC_HOME/bin:..

   驗證:protoc --version
           

3、安裝其他依賴

   執行指令:① yum install -y cmake;② yum install -y openssl-devel;③ yum install -y ncurses-devel。
           

4、開始編譯工作

  從官網下載下傳需要編譯的hadoop源碼版本,本次實驗:hadoop-2.6.0-src.tar.gz,官網下載下傳:http://archive.apache.org/dist/hadoop/core/stable/。

  進入/usr/local,執行解壓操作:tar -zxvf hadoop-2.6.0-src.tar.gz,然後修改一個hadoop-2.x共有的bug(詳見https://issues.apache.org/jira/browse/HADOOP-10110),編輯檔案:usr/local/hadoop-2.6.0-src/hadoop-common-project/hadoop-auth/pom.xml,第55行左右增加如下内容:

<dependency>
         <groupId>org.mortbay.jetty</groupId>
         <artifactId>jetty-util</artifactId>
         <scope>test</scope>
</dependency>
           

  然後進入目錄/usr/local/hadoop-2.6.0-src中,執行指令:mvn package -DskipTests -Pdist,native,docs,其中docs根據需要添加。

  編譯大概需要二三十分鐘,看到一堆的SUCCESS,說明編譯成功,編譯後的項目在hadoop-2.6.0-src/hadoop-dist/target/hadoop-2.6.0中。

  隻需要将編譯後項目中的/hadoop-dist/lib/native檔案夾覆寫至之前32位的項目中即可(當然整個項目覆寫也可以),并在配置檔案

 

$HADOOP_HOME/etc/hadoop/hadoop-env.sh末尾添加:export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"。

繼續閱讀