util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
主要是依赖包 版本 过低的问题。
首先要定位问题,出现该问题的原因主要是hadoop native下面的hadoop静态库的问题:
libhadoop.so.1.0.0
原因一:
网上有很多说法是版本 默认 64位 而 系统是 32位,验证一下:
先看下系统版本:
uname -r
再看下 libhadoop.so.1.0.0 库 的版本
file libhadoop.so.1.0.0
[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
可以看到并不是版本的问题。
原因二 :
其实是依赖库的问题
对静态库查看下依赖:看下依赖是否都正常:
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.
还可以直接确认下glibc 目前支持的版本:
通过如下查询方法:
strings /lib64/libc.so.6|grep GLIBC
[root@soft native]# 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
[root@soft native]#
可以看到目前只支持到 2.12
那么现在需要升级 glibc 库就行了。
Glibc 升级采用源码编译安装的方法:
wget http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz
tar -xf glibc-2.17.tar.gz
cd glibc-2.17
mkdir build; cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make -j 8
make install
strings /lib64/libc.so.6 | grep GLIBC
这时已经有了2.17
重启start-dfs.sh,报错继续。
原因三 :
环境配置的问题:
在hadoop-env.sh中,添加下面配置:
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
在修改完成后需要重新执行
hadoop namenode –format
然后再启动。