hadoop native本地庫問題總結


       近期,打算hbase建表用snappy壓縮時,碰到一些hadoop本地庫的問題。

事實上這些問題是一直存在的,僅僅是不影響正常使用,就沒有引起重視。

這次希望徹底解決下面問題:

問題一:運行start-dfs.sh時出現下面日志

xxxx: Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /usr/local/hadoop-2.4.0/lib/native/libhadoop.so which might have disabled stack guard. The VM will try to fix the stack guard now.

xxxx: It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.

這是由於官網提供的版本號本地庫是32位的,在64位主機環境下無法運行。須要下載hadoop源代碼進行編譯(怎樣編譯源代碼能夠上網搜索),編譯成功后,找到native下的文件復制到${HADOOP_HOME}/lib/native文件夾下就可以。

問題二:運行start-dfs.sh時出現下面日志

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

在網上找到的全部文章中,都是說在hadoop-env.sh中增加下面兩行配置:

export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native

export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/"

可是在測試過程中,增加以上配置還是會提示告警信息,說明本地庫未載入成功。

開啟debug:

       export HADOOP_ROOT_LOGGER=DEBUG,console

       運行start-dfs.sh,發現下面日志:

       DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: no hadoop in java.library.path

從日志中能夠看出hadoop庫不在java.library.path所配置的文件夾下,應該是java.library.path配置的路徑有問題。在hadoop-env.sh中又一次配置:

export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native

export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native/"

運行start-dfs.sh,告警信息不再顯示。經測試。事實上僅僅需export HADOOP_OPTS就可以解決這個問題。

驗證本地庫是否載入成功:hadoop checknative

15/08/18 10:31:17 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native

15/08/18 10:31:17 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library

Native library checking:

hadoop: true /usr/local/hadoop-2.4.0/lib/native/libhadoop.so.1.0.0

zlib:   true /lib64/libz.so.1

snappy: true /usr/local/hadoop-2.4.0/lib/native/Linux-amd64-64/libsnappy.so.1

lz4:    true revision:99

bzip2:  true /lib64/libbz2.so.1

以上說明本地庫已經載入成功。


安裝snappy壓縮配置能夠參考下面兩篇文章:

http://www.micmiu.com/bigdata/hadoop/hadoop-snappy-install-config/

http://www.cnblogs.com/shitouer/archive/2013/01/14/2859475.html


依據以上文章配置hbase的時候,建表的時候會卡住。且regionserver報錯:IOException: Compression algorithm 'snappy' previously failed test


在網上搜了非常多的文章。都是千篇一律的復制粘帖,始終無法解決以上問題。只是幸運的是。最后找到了這篇文章http://blackwing.iteye.com/blog/1943575,盡管描寫敘述上一直讓我非常費解,可是經過摸索終於還是攻克了我的問題,非常感謝這位博主。

最后配置hbase須要做的步驟:

1、把hadoop的本地庫和snappy的本地庫都復制到$HBASE_HOME/lib/native/Linux-amd64-64/文件夾下,例如以下截圖:


2、在hbase-env.sh中加入下面配置:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/Linux-amd64-64/

export HBASE_LIBRARY_PATH=$HBASE_LIBRARY_PATH:$HBASE_HOME/lib/native/Linux-amd64-64/


希望對碰到相同問題的童鞋有點幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM