答案取决于...我刚刚从tarball在64位CentOS 6.6上安装了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 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。唯一的解决方案是从我的OS上的源代码构建本机库,或者取消显示警告并暂时将其忽略。我选择暂时不显示恼人的警告(但将来计划从源构建)使用与获取调试消息相同的日志记录选项进行购买,只是现在将其设置为ERROR级别。
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
我希望这可以帮助其他人看到开源软件的一大好处是,如果您采取一些简单的逻辑步骤,就可以弄清楚这些东西。