我目前正在运行CentOS的服务器上配置hadoop。运行start-dfs.sh
或stop-dfs.sh
时,会出现以下错误:
警告util.NativEcodeLoader:无法为您的平台加载native-hadoop库。。。使用Builtin-Java类(如适用)
我运行的是Hadoop2.2.0。
在网上搜索会出现以下链接:http://balanceandbreath.blogspot.ca/2013/01/utilnativeCodeLoader-cannable-to-load.html
但是,Hadoop2.x上/native/
目录的内容似乎不同,所以我不确定该怎么做。
我还在hadoop-env.sh
中添加了这两个环境变量:
导出hadoop_opts=“$hadoop_opts-djava.library.path=/usr/local/hadoop/lib/”
导出hadoop_common_lib_native_dir=“/usr/local/hadoop/lib/native/”
有什么想法吗?
我假设您正在64位CentOS上运行Hadoop。您看到警告的原因是本机Hadoop库$hadoop_home/lib/native/libhadoop.so.1.0.0
实际上是在32位上编译的。
总之,这只是一个警告,不会影响Hadoop的功能。
如果您确实想消除此警告,请下载Hadoop的源代码并在64位系统上重新编译libhadoop.so.1.0.0
,然后替换32位系统。
关于如何重新编译源代码的步骤包含在这里为Ubuntu:
祝你好运。
只需将word native添加到hadoop_opts
中,如下所示:
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
PS:谢谢Searene
答案取决于。。。我刚刚从tarball在64位CentOS 6.6上安装了Hadoop2.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 pr 64位的吗?”
`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
所以,吸取教训。不管怎样,剩下的至少让我能够压制警告。因此,我继续并执行了其他答案中建议的所有操作,使用HADOOP_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_CONF_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
我希望这能帮助其他人看到开放源码软件的一大好处是,如果你采取一些简单的逻辑步骤,你就能把这些东西弄清楚。