Hadoop _ 疑难杂症 解决1 - WARN util.NativeCodeLoader: Unable to load native-hadoop library for your plat

本文针对Hadoop运行时出现的WARNutil.NativeCodeLoader警告进行了详细分析,指出问题源于glibc版本不匹配,并提供了从源码编译升级glibc的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

      最近博主在进行Hive测试 压缩解压缩的时候 遇到了这个问题,

该问题也常出现在日常 hdfs 指令中, 在启动服务 与 hdfs dfs 执行指令的时候 :

都会显示该提示,下面描述下该问题应该如何解决:

 

参考文章:

Hadoop之—— WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...

https://blog.youkuaiyun.com/l1028386804/article/details/51538611

 

[大数据入门]解决centos6.5中WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platfor

https://blog.youkuaiyun.com/u012425536/article/details/78770410

 

异常解决:util.NativeCodeLoader: Unable to load native-hadoop library for your platform

https://blog.youkuaiyun.com/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.youkuaiyun.com/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文件末尾。

 

 

 

 

 

 

 

 

 

<think>好的,我现在遇到了一个Hadoop的问题,控制台提示“WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...”,需要解决这个问题。首先,我要理解这个警告的含义。 这个警告是说Hadoop无法加载本地库,可能是因为平台不支持或者库文件不存在。Hadoop的某些组件,比如压缩和解压,使用本地库可以提高性能,如果无法加载,可能会回退到Java实现,性能可能受影响,但功能还是可用的。 接下来,我需要确定问题具体原因。可能的因素包括:本地库文件是否缺失、Hadoop的二进制包是否与当前平台兼容(例如,32位和64位不匹配)、环境变量配置是否正确等。 首先,检查Hadoop安装目录下的lib/native目录,看看是否存在对应的.so文件。如果不存在,可能需要重新编译Hadoop或者下载包含本地库的二进制包。另外,确认系统是否是64位的,Hadoop预编译的本地库通常是64位的,如果系统是32位,可能需要自己编译。 然后,检查环境变量HADOOP_HOME和HADOOP_COMMON_LD_LIBRARY_PATH是否正确设置,确保指向了包含本地库的目录。有时候需要将这些路径添加到LD_LIBRARY_PATH中。 如果确认库文件存在且平台兼容,但仍有警告,可能需要忽略该警告,或者升级Hadoop版本。某些旧版本的Hadoop可能在某些平台上存在兼容性问题,更新到新版本可能解决。 最后,测试解决方案是否有效,例如运行Hadoop命令,查看警告是否消失,或者性能是否有改善。</think>出现 `WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...` 警告时,表明 Hadoop 无法加载与当前操作系统平台兼容的本地库(Native Library)。以下是分步解决方案: --- ### **1. 确认警告的影响** - **功能性影响**:Hadoop 的核心功能仍可正常运行,但依赖本地库的组件(如压缩算法 `zlib`、`snappy`)会回退到纯 Java 实现,性能可能下降。 - **无需修复的场景**:如果集群对性能不敏感,可忽略此警告。 --- ### **2. 检查本地库是否存在** 进入 Hadoop 安装目录的 `lib/native` 路径,检查是否存在 `.so`(Linux)或 `.dll`(Windows)文件: ```bash cd $HADOOP_HOME/lib/native ls -l ``` - **若目录为空**:说明未正确安装本地库。 - **若文件存在**:检查平台兼容性(如 64 位系统需对应 64 位库)。 --- ### **3. 解决方案** #### **情况 1:本地库缺失** **原因**:Hadoop 官方预编译的二进制包可能未包含某些平台的本地库。 **解决步骤**: 1. **下载含本地库的 Hadoop 包** 从 Hadoop 官网或镜像站下载带有 `-native` 标识的二进制包,例如 `hadoop-x.x.x.tar.gz`(包含预编译的本地库)。 2. **替换或补充本地库** 解压下载的包,将其 `lib/native` 目录下的文件复制到当前 Hadoop 的 `lib/native` 中。 --- #### **情况 2:平台不兼容** **原因**:系统架构(如 32 位)与本地库架构(通常为 64 位)不匹配。 **解决步骤**: 1. **确认系统架构** 执行以下命令检查系统位数: ```bash uname -m ``` - 输出应为 `x86_64`(64 位系统)。若为 `i386` 或 `i686`,则为 32 位系统。 2. **重新编译 Hadoop 本地库**(适用于 32 位系统或自定义平台) 需安装编译工具链(如 GCC、CMake)后,执行: ```bash cd $HADOOP_SOURCE_DIR mvn package -Pdist,native -DskipTests -Dtar ``` 编译完成后,从生成的 `hadoop-dist/target` 目录中获取新的 `lib/native` 文件。 --- #### **情况 3:环境变量未配置** **原因**:Hadoop 未正确识别本地库路径。 **解决步骤**: 1. **设置 `LD_LIBRARY_PATH`** 在 `hadoop-env.sh` 中添加以下行: ```bash export HADOOP_COMMON_LD_LIBRARY_PATH=$HADOOP_HOME/lib/native export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_COMMON_LD_LIBRARY_PATH ``` 2. **应用配置并重启 Hadoop** 执行 `source hadoop-env.sh` 后重启 Hadoop 服务。 --- ### **4. 验证修复结果** 运行以下命令检查本地库是否加载成功: ```bash hadoop checknative ``` - **期望输出**: ``` zlib: true snappy: true zstd : true ... ``` --- ### **5. 其他建议** - **升级 Hadoop 版本**:旧版本可能缺少对新系统的支持。 - **忽略警告**:在 `log4j.properties` 中关闭 NativeCodeLoader 的警告: ```properties log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR ``` --- **总结**:此警告通常由本地库缺失或平台不兼容引起。优先通过补充本地库或配置环境变量解决,若对性能无要求,也可选择忽略。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值