Hadoop異常解決:Unable to load native-hadoop library


問題

使用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

可以正常使用了。

總結

遇到問題,結合前人經驗,融合自己的思考,關鍵時刻要多想一步!


免責聲明!

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



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