解决 hadoop 命令警告 Unable to load native-hadoop library for your platform...

来源:互联网 发布:seo综合查询工具 编辑:程序博客网 时间:2024/06/01 10:03

学习hadoop过程中在虚拟机centos上执行hadoop fs命令时出现WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable错误。

在网上搜索问题,将解决方法记录下来。

1.首先打开hadoop的详细日志输出功能,方法是设置环境变量。

  export HADOOP_ROOT_LOGGER=DEBUG,console 或者在~/.bash_profile 中添加

2.再次执行hadoop fs 命令查看错误信息

如下:


......
17/07/28 08:37:34 DEBUG security.Groups:  Creating new Groups object
17/07/28 08:37:34 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...
17/07/28 08:37:34 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.Unsat
isfiedLinkError: /home/xhc/hadoop-2.5.2/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/xhc/hadoop-2.5.2/lib/native/libhadoop.so.1.0.0)17/07/28 08:37:34 DEBUG util.NativeCodeLoader: java.library.path=/home/xhc/hadoop-2.5.2/lib/native

17/07/28 08:37:34 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...
 using builtin-java classes where applicable17/07/28 08:37:34 DEBUG security.JniBasedUnixGroupsMappingWithFallback: Falling back to shell based
17/07/28 08:37:34 DEBUG security.JniBasedUnixGroupsMappingWithFallback: Group mapping impl=org.apache.h
adoop.security.ShellBasedUnixGroupsMapping17/07/28 08:37:34 DEBUG security.Groups: Group mapping impl=org.apache.hadoop.security.JniBasedUnixGrou
psMappingWithFallback; cacheTimeout=300000; warningDeltaMs=500017/07/28 08:37:34 DEBUG security.UserGroupInformation: hadoop login

......

3.根据红色标记的日志内容,java在调动native(本地)方法时报错,libhadoop.so.1.0.0 需要的GLIBC 2.14 找不到。

4.使用$ ll /lib64/libc.so.6 命令查看当前glibc 版本

如下:

lrwxrwxrwx. 1 root root 12 Jul 28 12:32 /lib64/libc.so.6 -> libc-2.12.so

5.当前版本2.12不满足2.14的需求,升级glibc版本。

下载网址:http://ftp.gnu.org/gnu/glibc/

根据网上介绍安装glibc需要用到glibc 和 glibc-linuxthreads  这2个源码,然后编译并安装。

我下载了glibc-2.14.tar.gz 和 glibc-linuxthreads-2.5.tar.bz2 。

6. 安装glibc 

例如当前在 /home/username/目录下

1)解压:tar -zxvf glibc-2.14.tar.gz  

2)进入解压出来的目录:cd glibc-2.14

3)解压另一个tar:tar -jxvf glibc-linuxthreads-2.5.tar.bz2

4)返回到上一级目录:cd ..

5)设置优化开关(照抄还不了解具体含义):export CFLAGS="-g -O2"

6)创建安装文件目录:mkdir glibc-build

7)进入安装目录编译并安装

$ cd glibc-build   

$ ../glibc-2.7/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-sanity-checks

$ make

$ su root 

$ make install

我安装结束时提示有error,没去管

make[1]: *** [install] Error 1
make[1]: Leaving directory `/home/xhc/resources/glibc-2.14'
make: *** [install] Error 2

8)查看glibc版本:ll /lib64/libc.so.6 

lrwxrwxrwx. 1 root root 12 Jul 28 12:32 /lib64/libc.so.6 -> libc-2.14.so

发现已经升级到2.14

9)运行hadoop fs 命令,查看是否正常

将hadoop日志输入改为INFO 

export HADOOP_ROOT_LOGGER=INFO,console 或vi ~/.bash_profile 中修改


$ hadoop fs -cat /input.txt

1.hello world!
2.你好
3.1+1=2


发现不再出现WARN,处理完毕


其他解决方法。

同样的问题WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

会有其他情况和解决方法:

1. $HADOOP_HOME/lib/native/libhadoop.so.1.0.0 是用32位编译的,但是hadoop运行在64位的centos上就会出现这个问题,可以在64位系统中编译hadoop源码然后将libhadoop.so.1.0.0覆盖原来的32位的。

2. hadoop 找不到libhadoop.so.1.0.0 ,需要设置环境变量:export JAVA_LIBRARY_PATH='/usr/local/sinasrv2/hadoop/hadoop-2.6.4/lib/native'



借鉴的文章:

升级glibc来解决方法:http://www.cnblogs.com/maydow/p/5295065.html、http://blog.csdn.net/liws2010/article/details/45699047

操作系统位数与hadoop不匹配的解决方法:http://blog.csdn.net/young_kim1/article/details/50324345  、 https://stackoverflow.com/questions/19943766/hadoop-unable-to-load-native-hadoop-library-for-your-platform-warning

找不到libhadoop.so.1.0.0的解决方法:http://blog.csdn.net/yesuhuangsi/article/details/51832170


感谢先行者的记录分享






阅读全文
0 0
原创粉丝点击