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

用官方的Hadoop 2.1.0-beta安裝後,每次hadoop命令進去都會拋出這樣一個Warning

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

設置logger級別,看下具體原因

export HADOOP_ROOT_LOGGER=DEBUG,console​
13/08/29 13:59:38 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...
13/08/29 13:59:38 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /usr/local/hadoop/hadoop-2.1.0-beta/lib/native/libhadoop.so.1.0.0: /usr/local/hadoop/hadoop-2.1.0-beta/lib/native/libhadoop.so.1.0.0: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
13/08/29 13:59:38 DEBUG util.NativeCodeLoader: java.library.path=/usr/local/hadoop/hadoop-2.1.0-beta/lib/native/Linux-amd64-64:/usr/local/hadoop/hadoop-2.1.0-beta/lib/native
13/08/29 13:59:38 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
wrong ELFCLASS32,難道是加載的so文件系統版本不對
執行命令file libhadoop.so.1.0.0
libhadoop.so.1.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped
果然是80386,是32位的系統版本,而我的hadoop環境是64位OS
原來直接從apache鏡像中下載的編譯好的Hadoop版本native library都是32版本的,如果要支持64位版本,必須自己重新編譯,這就有點坑爹了,要知道幾乎所有的生產環境都是64位的OS
YARN官方對於native library的一段話驗證了這一點
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.1.0-beta/
加上編譯native的選項,編譯時會根據當前的操作系統架構來生產相應的native庫
mvn package -Pdist,native -DskipTests -Dtar
再去native文件下查看所有的file type,已經都是64位版的了,替換線上文件,WARNING消除
file *
libhadoop.a:        current ar archive
libhadooppipes.a:   current ar archive
libhadoop.so:       symbolic link to `libhadoop.so.1.0.0'
libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, not stripped
libhadooputils.a:   current ar archive
libhdfs.a:          current ar archive
libhdfs.so:         symbolic link to `libhdfs.so.0.0.0'
libhdfs.so.0.0.0:   ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, not stripped

本文鏈接http://blog.csdn.net/lalaguozhe/article/details/10361367,轉載請註明

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章