??在hadoop的學(xué)習(xí)過程中,遇到了WARN util.NativeCodeLoader: Unable to load native-hadoop library for yourplatform... using builtin-java classes where applicable的警告。盡管并不影響程序的正常運行,但每次使用hdfs命令時彈出警告還是略微影響使用體驗的。因此,將調(diào)試過程記錄如下:
??寫在前面:Hadoop本地庫是為了提高效率或者某些不能用Java實現(xiàn)的功能組件庫。目前只支持 *unix, 在Mac OS X和Cygwin上不提供直接支持。因此需要自己重新編譯,這里有篇文章可供參考:Mac OSX 下 Hadoop 使用本地庫提高效率
1.確認(rèn)OS位數(shù),JDK位數(shù),Hadoop本地庫位數(shù)是否一致
??OS位數(shù)查看方法:uname -a
??JDK位數(shù)查看方法:java -version
??Hadoop本地庫位數(shù)查看方法:進(jìn)入hadoop下的lib/native文件夾下 ldd libhadoop.so.1.0.0
2.路徑問題
開啟debug:直接在shell下運行下以下代碼
export HADOOP_ROOT_LOGGER=DEBUG,console
此時通過hdfs dfs -ls來查看輸出并找到如下記錄
DEBUG util.NativeCodeLoader: java.library.path=/usr/local/hadoop/lib/
如果記錄與之類似,即沒有/lib/native/結(jié)尾的路徑,說明問題的原因出在path問題上,本地庫的路徑并沒有被正確的加載。
解決方法:
在/HADOOP_HOME/etc/hadoop/中的hadoop_env.sh中修改如下信息:
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
再次執(zhí)行hdfs dfs -ls并查看輸出,若path仍未以native/結(jié)尾,返回根目錄下執(zhí)行echo $PATH,查看$HADOOP_HOME的路徑是否正確輸出,若不存在Hadoop的路徑,則通過修改.bash_profile或者/etc/profile文件配置好Hadoop路徑并通過source /etc/profile來使配置生效
3.鏈接文件問題
查看native文件夾下libhadoop.so及libhdfs.so文件是否存在,若不存在,做符號鏈接之。若存在但文件大小為0,刪除并重新做符號鏈接
ln -s libhadoop.so.1.0.0 libhadoop.so
ln -s libhdfs.so.0.0.0 libhdfs.so