問題描述 :
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
這裏描述下我出現問題的原因:主要是依賴包 版本 過低的問題。
首先我們要定位問題,出現該問題的原因主要是 hadoop目錄/lib/native 下面的 hadoop 靜態庫 的問題:
libhadoop.so.1.0.0
原因一:
網上有很多說法是版本 默認 64位 而 系統是 32位,那我們要自己驗證一下。
我們首先看下自己操作系統的版本:
執行指令:
[root@master native]# uname -r
2.6.32-696.30.1.el6.x86_64
那我們再看下 libhadoop.so.1.0.0 庫 的版本
執行指令:
#hadoop目錄/lib/native下面
[root@master native]# file libhadoop.so.1.0.0
libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
可以看到並不是版本的問題。
那我們到底是爲什麼呢?
原因二 :
其實是依賴庫的問題
我們對靜態庫查看下依賴:看下依賴是否都正常:
通過指令
[root@master native]# ldd libhadoop.so.1.0.0
./libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
linux-vdso.so.1 => (0x00007fff369ff000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f3caa7ea000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3caa455000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3caac1b000)
可以看到是glibc 版本的問題:
我們再確認下:
GLIBC_2.14找不到,現在檢查系統的glibc庫, ldd --version 即可檢查。
輸入命令:
ldd --version
ldd (GNU libc) 2.12
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
還可以直接確認下glibc 目前支持的版本:
通過如下查詢方法:
strings /lib64/libc.so.6|grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
可以看到目前只支持到 2.12
那麼問題發生了轉化,我們只需要升級 glibc 庫就行了。
Glibc 升級:
Glibc 升級這裏我們採用從源碼編譯安裝的方法:
我也嘗試了直接從rpm 包 安裝的方式,但是並不成功,主要是系統中應用依賴的問題,
可以參看這篇文章 : rpm 包安裝:
[大數據入門]解決centos6.5中WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platfor
https://blog.csdn.net/u012425536/article/details/78770410
由於怕導致系統出問題,沒有直接卸載原有的 rpm 包。
進入主題 :
下載源碼:
http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz
這裏可以選擇你所需要的版本。
執行指令:
wget http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz
安裝
[root@kafzook1 common]# tar -xf glibc-2.17.tar.gz
[root@kafzook1 common]# cd glibc-2.17
[root@kafzook1 glibc-2.17]# mkdir build; cd build
[root@kafzook1 build]# ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
[root@kafzook1 build]# make -j 8
[root@kafzook1 build]# make install
[root@kafzook1 common]# strings /lib64/libc.so.6 | grep GLIBC
會看到下面的結果
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_PRIVATE
安裝 (make install)後可看到如下輸出,證明安裝完成:
在執行 hdfs dfs -ls / 就沒有警告了:
[root@master native]# hdfs dfs -ls /
Found 10 items
drwxr-xr-x - root supergroup 0 2018-05-15 22:23 /180-monitor
drwxr-xr-x - root supergroup 0 2018-07-04 16:39 /bigdata
drwxr-xr-x - root supergroup 0 2018-06-08 20:23 /hive
-rw-r--r-- 1 root supergroup 10545797 2018-03-12 15:24 /log_20180309_10.1520563967876.txt
drwxr-xr-x - szh supergroup 0 2018-03-12 17:10 /out
drwxr-xr-x - root supergroup 0 2018-05-04 16:51 /test
drwx-wx-wx - root supergroup 0 2018-05-14 20:25 /tmp
drwxr-xr-x - root supergroup 0 2018-06-22 21:53 /user
drwxr-xr-x - root supergroup 0 2018-05-08 22:28 /usr
-rw-r--r-- 1 root supergroup 46 2018-03-12 15:50 /words.txt
原因三 :
環境配置的問題:
在/etc/profile中,添加下面配置:
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_HOME=/home/hadoop/labc/hadoop-2.7.1
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
最後記得使配置生效:
source /etc/profile
並把相同配置添加到hadoop-env.sh文件末尾。