zdsg
发布于

glibc升级 hadoop3.x安装(依赖glibc2.14及以上)

一 如果不升级产生的影响

  • 1.datanode 启动失败,并且日志报错如下:
java.lang.RuntimeException: Although a UIX domain socket path is configured as /vat/lib/hadoop-hdfs/dn_socket,we cannot start a localDataXceiverServer because libhadoop cannot be loaded
  • 2.libhadoo 相关 jar 包识别不到,和 1 的错误原因是一个问题
# 打开debug模式,显示为什么识别不到libhadoop的jar包
[root@oushu01 ~]# export HADOOP_ROOT_LOGGER=DEBUG,console
[root@oushu01 ~]# hadoop checknative -a
2022-07-16 11:15:56 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...
2022-07-16 11:15:56 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /usr/hdp/3.1.2.0-4/hadoop/lib/native/libhadoop.so: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/hdp/3.1.2.0-4/hadoop/lib/native/libhadoop.so)
2022-07-16 11:15:56 DEBUG util.NativeCodeLoader: java.library.path=/usr/local/lib:/usr/hdp/3.1.2.0-4/hadoop/lib/native
2022-07-16 11:15:56 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2022-07-16 11:15:56 DEBUG util.Shell: setsid exited with exit code 0
Native library checking:
hadoop:  false 
zlib:    false
zstd:    false
snappy:  false 
lz4:     false 
bzip2:   false 
openssl: false
ISA-L:   false
2022-07-16 11:15:56 DEBUG util.ExitUtil: Exiting with status 1: ExitException

二 确认本地 glibc 已安装的版本

# 结果显示没有2.14,则需要升级
[root@oushu01 ~]# 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

三 升级步骤

  • 1.下载 glibc-2.14.tar.gz
http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
  • 2.解压,编译
yum install gcc-c++

tar -zxvf glibc-2.14.tar.gz

cd glibc-2.14

mkdir build

cd build

../configure --prefix=/usr/local/glibc-2.14 --with-headers=/usr/include

make j4

make install
  • 3.使安装的新版本生效
cp /usr/local/glibc-2.14/lib/libc-2.14.so /lib64/

ldconfig
  • 4.将系统默认语言接口设置进行拷贝
# 如果不执行这两步,那么新开一个客户端连接,会提示locale的相关warning
mkdir -p /usr/local/glibc-2.14/lib/locale
\cp /usr/lib/locale/locale-archive  /usr/local/glibc-2.14/lib/locale/
  • 5.查看 glibc 的版本升级成功
[root@oushu01 ~]# 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
  • 6.重新登录该窗口,查看 libhadoop 是否正常
# 因为我是用的版本是编译的hdp版本,所以只要结果不全是false,说明hadoop识别到了对应的glibc的版本
[root@oushu01 ~]# hadoop checknative -a
2022-07-16 11:54:23 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Native library checking:
hadoop:  true /usr/hdp/3.1.2.0-4/hadoop/lib/native/libhadoop.so
zlib:    true /lib64/libz.so.1
zstd:    false
snappy:  true /usr/lib64/libsnappy.so.1 
lz4:     true revision:10301
bzip2:   true /lib64/libbz2.so.1
openssl: true /usr/lib64/libcrypto.so
ISA-L:   false libhadoop was built without ISA-L support
  • 7.升级额外注意事项
所有安装hadoop包含的相关服务的机器都要升级,如果只升级datanode所在机器,
那么在没有升级的节点上 hdfs dfs -ls /去查看hdfs目录结构的时候,也会报这个错,
所以每个节点都要升级glibc

四 踩坑记录

  • 1.踩坑 1
网上很多博客,会删除/lib64/libc.so.6这个软连接
这样会导致所有的命令基本都用不了
那如果真的误删了/lib64/libc.so.6软连接,千万别退出当前窗口
  • 误删/lib64/libc.so.6 解决办法
# 此时新开一个窗口,是登录不上的,所以不要退出当前窗口
# 如果当前是root用户,执行以下步骤,即可恢复正常
# 如果当前不是root用户,也可以尝试以下步骤,不保证生效

export LD_PRELOAD=/lib64/libc-2.12.so
# 这个export具体的libc的版本,可以tab出来,挑服务器上最新的版本就好
ln -s /lin64/libc-2.12.so /lib64/libc.so.6
# 此时输入ls等命令,均已正常
  • 2.踩坑 2
个人升级完成之后,服务器的时间与设置的时区不符
比如我的时区配置的是 'Asia/Shanghai'
结果date的时间没有生效,还是+0.00,并且提示 local time zone must be set-see zic manual page 2022
  • 解决方法
在/etc/profile下追加
export TZ='Asiz/Shanghai'
source /etc/profile
评论
    test