http://www.360doc.com/content/14/0724/15/597197_396743445.shtml
用官方的Hadoop 2.1.0-beta安装后,每次hadoop命令进去都会抛出这样一个Warning
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
设置logger级别,看下具体原因
- 13/08/29 13:59:38 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...
- 13/08/29 13:59:38 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /usr/local/hadoop/hadoop-2.1.0-beta/lib/native/libhadoop.so.1.0.0: /usr/local/hadoop/hadoop-2.1.0-beta/lib/native/libhadoop.so.1.0.0: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
- 13/08/29 13:59:38 DEBUG util.NativeCodeLoader: java.library.path=/usr/local/hadoop/hadoop-2.1.0-beta/lib/native/Linux-amd64-64:/usr/local/hadoop/hadoop-2.1.0-beta/lib/native
- 13/08/29 13:59:38 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
- file *
- libhadoop.a: current ar archive
- libhadooppipes.a: current ar archive
- libhadoop.so: symbolic link to `libhadoop.so.1.0.0'
- libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, not stripped
- libhadooputils.a: current ar archive
- libhdfs.a: current ar archive
- libhdfs.so: symbolic link to `libhdfs.so.0.0.0'
- libhdfs.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, not stripped
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...
using builtin-java classes where applicable
搜了好多文章,都说是跟系统位数有关系,我使用的是Centos 6.5 64位操作系统。
前两天在做Docker镜像的时候发现了一个步骤可以解决这个问题,亲试了一下,果然不再提示了。
首先下载hadoop-native-64-2.4.0.tar:
http://dl.bintray.com/sequenceiq/sequenceiq-bin/hadoop-native-64-2.4.0.tar
如果你是hadoop2.6的可以下载下面这个:
http://dl.bintray.com/sequenceiq/sequenceiq-bin/hadoop-native-64-2.6.0.tar
tar -x hadoop-native-64-2.4.0.tar -C hadoop/lib/native/
在基于hadoop 2.0的hbase上执行命令,经常会看到如下提示:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
1. 首先要检查hdfs有没有加载native lib库,检查hdfs的日志,如果发现其中有:
ERROR org.apache.hadoop.io.nativeio.NativeIO: Unable to initialize NativeIO libraries
说明hdfs的native的lib没有加载,检查hadoop目录下的lib/native下是否存在libhadoop.so,并且用file命令检查该so是由于操作系统的平台对应,默认下载的bin包中的so是32位的,如果用在64位的操作系统上,需要重新编译。可以参见http://blog.youkuaiyun.com/lalaguozhe/article/details/10580727
2. 如果以上问题解决,hdfs的日志中,没有发现有关native的错误信息,则要检查hbase的native库配置,在hbase中默认的native库路径是hbase目录下的lib/native/Linux-*(跟平台类型相关),可以通过ps aux|grep `jps|grep HRegion|awk '{print $1}'`命令获得region server的启动项,检查其中-Djava.library.path=的配置,我的服务器上是lib/native/Linux-amd64-64,于是在hbase目录下创建lib/native/Linux-amd64-64这个目录,并把hadoop目录下的lib/natvie下的so拷贝过来,在集群的所有结点上进行相同的操作,之后重启hbase集群,问题解决
本文详细介绍了在使用Centos6.5 64位操作系统安装Hadoop 2.1.0-beta版本后遇到的警告问题,并提供了解决方案。包括通过下载并替换特定版本的hadoop-native-64.tar文件来解决32位与64位系统不匹配的问题,以及在基于hadoop2.0的hbase上执行命令时可能出现的警告提示的解决方法。通过检查和配置hdfs和hbase的native库路径,确保系统位数一致,从而消除警告。
2万+

被折叠的 条评论
为什么被折叠?



