转载自:https://blog.csdn.net/u010003835/article/details/81127984
最近博主在进行Hive测试 压缩解压缩的时候 遇到了这个问题,
该问题也常出现在日常 hdfs 指令中, 在启动服务 与 hdfs dfs 执行指令的时候 :
都会显示该提示,下面描述下该问题应该如何解决:
参考文章:
Hadoop之—— WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...
https://blog.csdn.net/l1028386804/article/details/51538611
[大数据入门]解决centos6.5中WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platfor
https://blog.csdn.net/u012425536/article/details/78770410
异常解决:util.NativeCodeLoader: Unable to load native-hadoop library for your platform
https://blog.csdn.net/young_kim1/article/details/50324345
问题描述 :
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...
这里描述下我出现问题的原因:主要是依赖包 版本 过低的问题。
首先我们要定位问题,出现该问题的原因主要是 hadoop native 下面的 hadoop 静态库 的问题:
libhadoop.so.1.0.0
原因一:
网上有很多说法是版本 默认 64位 而 系统是 32位,那我们要自己验证一下。
我们首先看下自己操作系统的版本:
执行指令:
uname -r
-
[root@master native]#
uname
-r
-
2
.6
.32-696
.30
.1
.el6
.x86_64
那我们再看下 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.
-
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文件末尾。