??在hadoop的學(xué)習(xí)過程中,遇到了WARN util.NativeCodeLoader: Unable to load native-hadoop library for yourplatform... using builtin-java classes where applicable的警告却舀。盡管并不影響程序的正常運(yùn)行硬猫,但每次使用hdfs命令時(shí)彈出警告還是略微影響使用體驗(yàn)的甜紫。因此凳谦,將調(diào)試過程記錄如下:
??寫在前面:Hadoop本地庫是為了提高效率或者某些不能用Java實(shí)現(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下運(yùn)行下以下代碼
export HADOOP_ROOT_LOGGER=DEBUG,console
此時(shí)通過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