問題
使用Hadoop時,每次起NameNode,DataNode,或者使用命令hadoop fs -ls的時候,都會出現如下提示
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
怎么修呢?
分析
查看網上文章,比較靠譜的說法是“hadoop不能加載本地庫”。
不能加載的原因主要有兩種:
- Linux機器是32位的,Hadoop安裝包是64位的,不兼容,需要自己打包源碼。
- 運行的參數
HADOOP_OPTS沒有正確設置,所以找不到目錄文件。
一個一個來:
方案1
首先,我使用命令uname -i查看本機的配置,發現是64位的。第一個猜想不成立。
x86_64
參考 -> 5 ways to check if your Linux OS is 64-bit or 32-bit https://www.faqforge.com/linux/5-ways-check-linux-os-64-bit-32-bit/
方案2
其次,我配置了HADOOP_OPTS並重試,還是不行。第二個方案也失敗了。
/etc/hadoop/hadoop-env.sh
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
->
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
參考 -> hadoop報錯 https://blog.csdn.net/weixin_38256474/article/details/94440838
解決
多想一步,既然我們讓Hadoop去這個/lib/native目錄下查找類庫,那么這個目錄下到底有些什么東西呢?
cd過去一看,空空如也!
所以即使我們配置對了路徑,還是什么都沒有找到。
我使用的是這個版本,hadoop-2.6.0-cdh5.15.1。去官網重下了一個,解壓縮發現還是空的。
於是換了一個不是CDH的版本:hadoop-2.7.7,下載解壓縮,然后把/lib/native下的東西拷貝到原來的系統中。
-rw-r--r-- 1 root root 1492202 Oct 30 10:59 libhadoop.a
-rw-r--r-- 1 root root 1632624 Oct 30 10:59 libhadooppipes.a
-rwxr-xr-x 1 root root 864841 Oct 30 10:59 libhadoop.so
-rwxr-xr-x 1 root root 864841 Oct 30 10:59 libhadoop.so.1.0.0
-rw-r--r-- 1 root root 476154 Oct 30 10:59 libhadooputils.a
-rw-r--r-- 1 root root 446100 Oct 30 10:59 libhdfs.a
-rwxr-xr-x 1 root root 281340 Oct 30 10:59 libhdfs.so
-rwxr-xr-x 1 root root 281340 Oct 30 10:59 libhdfs.so.0.0.0
可以正常使用了。
總結
遇到問題,結合前人經驗,融合自己的思考,關鍵時刻要多想一步!
