Hadoop Native Librarys及GLIBC升级

[hdfs@tsczbddbprd3 ~]$ /data/hadoop/bin/hadoop checknative -a
19/04/28 01:28:56 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Native library checking:
hadoop:  false 
zlib:    false 
snappy:  false 
lz4:     false 
bzip2:   false 
openssl: false 

从上面可以看到native lib加载失败,我们使用debug日志来看看到底为什么?

[hdfs@tsczbddbprd3 ~]$ export HADOOP_ROOT_LOGGER=DEBUG,console

[hdfs@tsczbddbprd3 ~]$ /data/hadoop/bin/hadoop checknative -a

19/04/28 01:40:22 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...
19/04/28 01:40:22 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /data/hadoop/lib/native/libhadoop.so: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /data/hadoop/lib/native/libhadoop.so)
19/04/28 01:40:22 DEBUG util.NativeCodeLoader: java.library.path=/data/hadoop/lib/native
19/04/28 01:40:22 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
19/04/28 01:40:22 DEBUG util.Shell: setsid exited with exit code 0
Native library checking:
hadoop:  false 
zlib:    false 
snappy:  false 
lz4:     false 
bzip2:   false 
openssl: false 
19/04/28 01:40:22 INFO util.ExitUtil: Exiting with status 1

原因是缺少GLIBC_2.14,查看当前的版本:

[root@tsczbddbprd3 ~]# rpm -qa | grep glibc
glibc-common-2.12-1.212.0.3.el6_10.3.x86_64
glibc-utils-2.12-1.212.0.3.el6_10.3.x86_64
glibc-headers-2.12-1.212.0.3.el6_10.3.x86_64
glibc-static-2.12-1.212.0.3.el6_10.3.x86_64
glibc-devel-2.12-1.212.0.3.el6_10.3.x86_64
glibc-2.12-1.212.0.3.el6_10.3.x86_64
[root@tsczbddbprd3 ~]# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE

目前不支持2.14版本, 需要升级glibc。glibc网站地址:http://ftp.gnu.org/gnu/glibc/,下载2.14的包即可。

编译命令如下(为什么需要建立build目录,这是软件编译要求):

mkdir build && cd build 

../configure --prefix=/usr/local/glibc

make && make install

然后拷贝so文件到/lib64,并执行ldconfig:

cp /usr/local/glibc/lib/libc-2.14.so /lib64/

ldconfig
[root@tsczbddbprd3 lib64]# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_PRIVATE

这一步很多人会执行什么软连接,千万不要这么干 ,因为libc.so.6是很多程序必不可少的文件,如果你先删除软连接再生成新的软连接,很多命令都无法执行,甚至可能出现不能登入。 其实LINUX提供了ldconfig命令,然后自动重新生成。

测试hadoop native library:

[hdfs@tsczbddbprd3 ~]$ /data/hadoop/bin/hadoop checknative -a
19/04/28 02:03:36 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...
19/04/28 02:03:36 DEBUG util.NativeCodeLoader: Loaded the native-hadoop library
19/04/28 02:03:36 DEBUG util.Shell: setsid exited with exit code 0
19/04/28 02:03:36 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
19/04/28 02:03:36 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop:  true /data/hadoop/lib/native/libhadoop.so
zlib:    true /lib64/libz.so.1
snappy:  true /usr/lib64/libsnappy.so.1
lz4:     true revision:99
bzip2:   true /lib64/libbz2.so.1
openssl: true /usr/lib64/libcrypto.so

遗留问题,升级完之后,登入的时候会出现错误:

-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_COLLATE: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (en_US.UTF-8): No such file or directory

大家可以参考这篇文章:https://blog.csdn.net/guitar___/article/details/77651983

解决思路是:有2个locale,实际上通过which locale只能看到一个,我们编译的glibc, /usr/local/glibc/bin/locale会去寻找一个目录,但是这个目录不存在,因此报错。

/usr/local/glibc/lib/locale/locale-archive

那么从系统默认的locale目录拷贝一个过来即可。

[root@tsczbddbprd3 build]# rm -rf /usr/local/glibc/lib/locale 
[root@tsczbddbprd3 build]# mkdir -p /usr/local/glibc/lib/locale 
[root@tsczbddbprd3 build]# cp /usr/lib/locale/locale-archive  /usr/local/glibc/lib/locale 
[root@tsczbddbprd3 build]# su - hdfs
[hdfs@tsczbddbprd3 ~]$ exit
logout
[root@tsczbddbprd3 build]# 

一切正常了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tom_fans

谢谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值