执行命令hadoop/sbin/start-dfs.sh失败,报错信息如下:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicableIncorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
查找起因:
1、查看更具体的debug信息
执行命令export HADOOP_ROOT_LOGGER=DEBUG,console,而后再执行命令hadoop/sbin/start-dfs.sh,发现version `GLIBC_2.14' not found:Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /usr/local/hadoop/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/hadoop/lib/native/libhadoop.so.1.0.0)
好了,当初发现问题了,是查找GLIBC_2.14这个货色找不到,那么接下来就来理解一下这是个什么货色,怎样才能让hadoop找到这个货色。
2、GLIBC是什么
glibc是GNU公布的libc库,即c运行库。glibc是linux零碎中最底层的api,简直其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的零碎服务外,它自身也提供了许多其它一些必要性能服务的实现…
3、/lib64/libc.so.6是什么
libc.so.6 是c运行时库 glibc的软链接,而零碎简直所有程序都依赖c运行时库。程序启动和运行时,是依据libc.so.6 软链接找到glibc库。每个glibc.so文件有它反对的libc版本,能够通过 strings /lib64/libc.so.6 |grep GLIBC查看,肯定要抉择这条命令列出的版本。如果程序编译的时候链接的libc库版本不在程序运行环境下的glibc库反对的libc版本之内,也会报错。于是,零碎的所有命令 ls,cp,cd 等等都无奈应用了。
4、查看零碎的GLIBC版本
执行命令strings /lib64/libc.so.6 |grep GLIBC发现反对的最大版本是GLIBC_2.12,而hadoop错误信息里提到须要GLIBC_2.14
好了,当初咱们就想方法来增加GLIBC_2.14或更高版本,当初要思考降级到哪个版本呢?查资料发现:对于CentOS这样的零碎,为了谋求稳定性往往各种库版本都很低,比方6.5(我的机器零碎版本)自带的还是glibc2.12, 而ubuntu 14.04带glibc2.19,如果降级根本C运行库到一个太新的版本,可能会影响CentOS的运行。所以我抉择降级一个刚好够用的版本GLIBC_2.14,能解决问题就好,不找麻烦,嘻嘻。当初就来解决理论的问题:搭配这里找须要的版本http://ftp.gnu.org/gnu/glibc/
5、下载GLIBC_2.14包
wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
6、解压GLIBC_2.14包
tar -zxf glibc-2.14.tar.gz
7、编译
cd glibc-2.14,建设长期目录 mkdir buildcd build 执行../configure --prefix=/usr/local/glibc-2.14指定装置目录为/usr/local/glibc-2.14执行make && make install装置cp /usr/local/glibc-2.14/lib/libc-2.14.so /lib64/ ,也就是把编译好的so复制到/lib64上面
8、装置
重建软件,这一步最重要,操作不当,零碎会间接无奈应用cd /lib64删除旧的文件LD_PRELOAD=/lib64/libc-2.12.so rm libc.so.6更新为新的文件 LD_PRELOAD=/lib64/libc-2.14.so ln -s /lib64/libc-2.14.so libc.so.6注:libc.so.6只是一个软连,删除后可能会导致ls等命令都无奈失常应用。这时不要慌乱,能够通过LD_PRELOAD环境变量来解决。
9、查看更新胜利
strings /lib64/libc.so.6 |grep GLIBC
10、再次执行./sbin/start-dfs.sh没有报错信息了