YARN加載本地庫Unable to load native-hadoop library解決辦法

用官方的構建好的Hadoop 2.4.0(133MB)安裝後,每次輸入hadoop命令進去都會獲得這樣一個Warning,如圖:html

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicablejava

網上搜羅了一些資料,下面是解決辦法:shell

設置logger級別,看下具體緣由:apache

export HADOOP_ROOT_LOGGER=DEBUG,console

再次隨便運行一個hadoop相關的命令,將看到下面的錯誤:架構

wrong ELFCLASS32?,難道是加載的so文件系統版本不對?app

因而執行命令svn

cd $HADOOP_HOME/lib/native
file libhadoop.so.1.0.0

結果是這樣的:oop

果真是80386,是32位的系統版本,而個人hadoop環境是64位OSui

原來直接從apache鏡像中下載的編譯好的Hadoop版本native library都是32版本的,若是要支持64位版本,必須本身從新編譯,這就有點坑爹了,要知道幾乎全部的生產環境都是64位的OSspa

Hadoop官方對於native library的一段話驗證了這一點(詳見:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/NativeLibraries.html#Download):

「The pre-built 32-bit i386-Linux native hadoop library is available as part of the hadoop distribution and is located in the lib/native directory」 

因而從新checkout source code:

svn checkout http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.4.0/

加上編譯native的選項,編譯時會根據當前的操做系統架構來生產相應的native庫(詳見:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/NativeLibraries.html#Build):

mvn package -Pdist,native -DskipTests -Dtar

待編譯完成後,到release-2.4.0/hadoop-dist/target/hadoop-2.4.0/lib/native目錄下找到這個libhadoop.so.1.0.0文件,再次查看其file type:

file libhadoop.so.1.0.0

結果是這樣的:

用這個文件替換掉$HADOOP_HOME/lib/native/libhadoop.so.1.0.0,以後再次隨便運行一個Hadoop相關命令:

unset HADOOP_ROOT_LOGGER
hadoop fs -ls /

再看輸出:

WARN消失,問題解決。


參考網址:

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/NativeLibraries.html

http://tech.ddvip.com/2013-10/1381302137203719.html

相關文章
相關標籤/搜索