Hadoop _ 疑難雜症 解決1 - WARN util.NativeCodeLoader: Unable to load native-hadoop library for your plat

問題描述 :

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文件末尾。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章