hadoop“无法为您的平台加载本机hadoop库”警告

yb3bgrhw  于 2021-06-04  发布在  Hadoop
关注(0)|答案(21)|浏览(606)

我目前正在运行centos的服务器上配置hadoop。当我跑的时候 start-dfs.sh 或者 stop-dfs.sh ,我得到以下错误:
warn util.nativecodeloader:无法为您的平台加载本机hadoop库。。。在适用的情况下使用内置java类
我正在运行hadoop2.2.0。
在网上搜索时出现以下链接:http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html
但是 /native/ hadoop2.x上的目录似乎不同,所以我不知道该怎么办。
我还在中添加了这两个环境变量 hadoop-env.sh :
export hadoop\u opts=“$hadoop\u opts-djava.library.path=/usr/local/hadoop/lib/”
导出hadoop\u common\u lib\u native\u dir=“/usr/local/hadoop/lib/native/”
有什么想法吗?

ca1c2owp

ca1c2owp16#

我猜你在64位centos上运行hadoop。您看到该警告的原因是本机hadoop库 $HADOOP_HOME/lib/native/libhadoop.so.1.0.0 实际上是在32位上编译的。
总之,这只是一个警告,不会影响hadoop的功能。
如果您确实想消除此警告,请下载hadoop的源代码并重新编译 libhadoop.so.1.0.0 在64位系统上,然后替换32位系统。
关于如何为ubuntu重新编译源代码的步骤如下:
http://www.ercoppa.org/linux-compile-hadoop-220-fix-unable-to-load-native-hadoop-library.htm
祝你好运。

9bfwbjaz

9bfwbjaz17#

答案取决于。。。我刚刚在64位centos 6.6上安装了tarball的hadoop 2.6。hadoop安装确实附带了一个预构建的64位本机库。对于我的安装,这里是:

/opt/hadoop/lib/native/libhadoop.so.1.0.0

我知道它是64位的:

[hadoop@VMWHADTEST01 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 =>  (0x00007fff43510000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f9be553a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f9be51a5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9be5966000)

不幸的是,当我专注于“这个库是32位还是64位?”时,我愚蠢地忽略了眼前的答案:

`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)

所以,我们吸取了教训。不管怎样,剩下的至少让我能够压制住这个警告。所以我继续做其他答案中推荐的所有事情,使用hadoop\u opts环境变量提供库路径,但没有任何效果。所以我看了源代码。生成错误的模块会告诉您提示(util.nativecodeloader):

15/06/18 18:59:23 WARN util.NativeCodeLoader: Unable to load native-hadoop    library for your platform... using builtin-java classes where applicable

所以,到这里来看看它能做什么:
http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/nativecodeloader.java/
啊,有一些调试级别的日志记录-让我们打开它,看看我们是否得到一些额外的帮助。这是通过在$hadoop\u conf\u dir/log4j.properties文件中添加以下行来完成的:

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG

然后我运行了一个生成原始警告的命令,比如stop-dfs.sh,得到了这个好消息:

15/06/18 19:05:19 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /opt/hadoop/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /opt/hadoop/lib/native/libhadoop.so.1.0.0)

答案就在调试消息的这个片段中(与前面的ldd命令“尝试”告诉我的相同:

`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)

我有什么版本的glibc?下面是一个简单的技巧:

[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12

所以,无法将我的操作系统更新到2.14。唯一的解决方案是从我的操作系统上的源代码构建本机库,或者抑制警告并暂时忽略它。我选择了暂时不显示这个恼人的警告(但是计划将来从源代码构建),使用我们用来获取调试消息的相同日志选项,除了现在,只将其设置为错误级别。

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR

我希望这能帮助其他人看到,开源软件的一大好处是,如果你采取一些简单的逻辑步骤,你就能弄清楚这些东西。

zbq4xfa0

zbq4xfa018#

我和jdk6有同样的问题,我把jdk改成了jdk8,问题解决了。尝试使用jdk8!!!

yrdbyhpb

yrdbyhpb19#

这也会起作用:

export LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native
xhv8bpkk

xhv8bpkk20#

在我的例子中,在我的64位linux mint操作系统上构建hadoop之后,我替换了中的本机库 hadoop/lib . 问题仍然存在。然后我发现hadoop指向 hadoop/lib 不是为了 hadoop/lib/native . 所以我把所有内容从本机库移到其父库。警告也不见了。

u0sqgete

u0sqgete21#

基本上,这不是一个错误,而是hadoop集群中的一个警告。这里我们只更新环境变量。

export HADOOP_OPTS = "$HADOOP_OPTS"-Djava.library.path = /usr/local/hadoop/lib
export HADOOP_COMMON_LIB_NATIVE_DIR = "/usr/local/hadoop/lib/native"

相关问题