近期,打算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/
希望對碰到相同問題的童鞋有點幫助。