学习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
感谢先行者的记录分享