ITPub博客

首页 > 大数据 > Hadoop > Hadoop:Hadoop本地库和系统库版本不一致 喝no一j#

Hadoop:Hadoop本地库和系统库版本不一致 喝no一j#

Hadoop 作者:huangyintong 时间:2014-03-01 19:57:28 0 删除 编辑
    这个问题是针对于hadoop版本是2.2.0。上面这个报错是在启动HDFS出现的,完整的信息如下:
Hadoop:Hadoop本地库和系统库版本不一致
***********************************************************************************************
Hadoop本地库
    Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通过本地库,Hadoop可以更加高效地执行某一些操作。
    Hadoop本地库在hadoop文件夹下lib/native中,内容如下:
Hadoop:Hadoop本地库和系统库版本不一致
   其中的libhadoop.so就是hadoop的本地库。如果本地库不存在或者和当前操作系统版本不一致时,就会出现上面的报错。
***********************************************************************************************
错误定位
    下面的测试方法来自于:http://www.linuxidc.com/Linux/2012-04/59200.htm。运行两个命令,如下:
Hadoop:Hadoop本地库和系统库版本不一致
截取主要的错误信息如下:
Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /home/chenhuan/hadoop-2.2.0/lib/native/libhadoop.so.1.0.0: /lib/tls/i686/cmov/libc.so.6: version `GLIBC_2.12' not found (required by /home/chenhuan/hadoop-2.2.0/lib/native/libhadoop.so.1.0.0)
-------------------------------------------------------------------
关键在于这句:/lib/tls/i686/cmov/libc.so.6:version 'GLIBC_2.12'not found
看样子确实是因为libc的版本不对,需要的版本应该是2.12。可以使用下面的命令来查看libc的版本:
Hadoop:Hadoop本地库和系统库版本不一致
这里实际的版本是2.11.1。
------------------------------------------------------------------
    所以解决问题的办法是将系统的libc版本升级到2.12.1。
***********************************************************************************************
升级libc
    从下面的地址下载两个文件:http://ftp.gnu.org/gnu/glibc/
(1)glibc-2.12.1.tar.gz
(2)glibc-linuxthreads-2.5.tar.bz2
=======================================================================
安装libc-2.12.1
-----------------------------------------------------------
(1)建立一个文件夹,将glibc-2.12.1.tar.gz解压入其中;
Hadoop:Hadoop本地库和系统库版本不一致
-----------------------------------------------------------
(2)将glibc-linuxthreads-2.5.tar.bz2解压到glibc-2.9中:
Hadoop:Hadoop本地库和系统库版本不一致
-----------------------------------------------------------
(3)configure
注意,这里需要退出glibc-2.12.1文件夹,在外层文件夹调用configure命令。下面的两个命令非常重要,直接决定是否可以成功:
$export CFLAGS="-O2 -U_FORTIFY_SOURCE -fno-stack-protector"
$./glibc-2.12.1/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
Hadoop:Hadoop本地库和系统库版本不一致
----------------------------------------------------------
(4)make
直接在外层文件夹调用make就可以了,如果上面的CFLAGS设置不对,这里会出现如下的一个error:
../misc/syslog.c: In function ‘__vsyslog_chk’:
../misc/syslog.c:123: sorry, unimplemented: inlining failed in call to ‘syslog’: function body not available
../misc/syslog.c:155: sorry, unimplemented: called from here
make[2]: *** [/mnt/adm/sources/glibc-build/misc/syslog.o] Error 1
make[2]: Leaving directory `/mnt/adm/sources/glibc-src/misc'
make[1]: *** [misc/subdir_lib] Error 2
make[1]: Leaving directory `/mnt/adm/sources/glibc-src'
make: *** [all] Error 2 #make install
更加详细的内容可以参考这篇文章:http://swiss.ubuntuforums.org/showthread.php?p=7624127
---------------------------------------------------------
(5)sudo make install
如果make没有问题,这里一般不会出现问题,至此安装完成。
*********************************************************************************************  
现在可以再来查看libc的版本,如下:
Hadoop:Hadoop本地库和系统库版本不一致
但是在/lib/tls/i686/cmov/libc.so.6中的结果还是libc.2.12.1.so
Hadoop:Hadoop本地库和系统库版本不一致
既然libc-2.12.1.so已经存在了,再创建一个libc.so.6的符号链接就可以了~~~
Hadoop:Hadoop本地库和系统库版本不一致
PS:折腾了一下午终于搞定了,明天开始做答辩PPT~~~
<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22686455/viewspace-1120118/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-10-11