0669-6.2.0-集群中部分节点hadoop命令无法使用问题分析

Fayson的github: https://github.com/fayson/cdhproject

推荐关注微信公众号:“Hadoop实操”,ID:gh_c4c535955d0f

1 问题现象

在做CDH版本降级(C62.0->C5.16.1)测试的过程中,集群中有两个节点上运行的角色(DataNode、NodeManager等)服务均正常。但在该节点上无法执行hadoop等相关命令,提示如下错误:

-bash: hadoop: command not found

在这里插入图片描述

测试环境
1.Redhat7.2
2.采用root用户操作

2 问题分析

根据报错“-bash: hadoop: command not found”分析,在该节点是否有hadoop命令,默认CDH服务的组件命令都是软连到/usr/bin目录下,在/usr/bin中查看一下是否有hadoop命令

[root@cdh03 bin]# ll /usr/bin/hadoop

在这里插入图片描述

由上图可以看到/usr/bin/hadoop软链指向的地址在闪烁,提示软链失效。进一步查看hadoop软链指向的地址,如下显示:

[root@cdh03 bin]# ll /etc/alternatives/hadoop

在这里插入图片描述

同样可以看到/etc/alternatives/hadoop软链指向的地址也在闪烁,软链也是失效的。通过软链指向的5.14.0路径并未找到hadoop命令,由于当前CDH集群版本为5.16.1,同样也确认了在/opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/bin/ 目录下存在hadoop命令

[root@cdh03 bin]# ll /opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/bin/hadoop
-rwxr-xr-x 1 root root 621 Nov 22  2018 /opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/bin/hadoop

通过上述分析发现hadoop命令软连最终指向的是CDH5.14.0版本的地址,但在Fayson集群中并有5.14.0版本的CDH,从而导致hadoop等其它服务的命令失效。那么解决该问题的方式就是能够恢复/etc/alternatives目录下软链指向正确的CDH版本对应的命令目录即可。

3 问题解决

3.1 通过tar包拷贝软链的方式

如果在其他节点上的/etc/alternatives目录下的软链是正确的,可以把其他节点的目录复复制到问题节点来恢复。

1.在软链正确的节点上检查/etc/alternatives目录下软链是否正确

在这里插入图片描述

2.执行如下命令将/etc/alternatives目录压缩打包

[root@cdh01 ~]# tar cvzf alter.tar /etc/alternatives/

在这里插入图片描述
3.打包成功,我们把tar包传到cdh03,然后解压。

[root@cdh01 ~]# scp alter.tar cdh03.hadoop.com:/

在这里插入图片描述

[root@cdh03 /]# tar xzvf alter.tar

解压后再看一下/etc/alternatives目录下的软链是否正常

在这里插入图片描述
如上图所示可以看到/etc/alternatives目录下的软链都已经正常。

4.测试hadoop等命令能否正常使用

在这里插入图片描述

如上所示可以看到已经可以正常识别到hadoop命令。

注意:复制正确节点的/ect/alternatives目录时需要注意不要使用scp的方式,scp不会保留软链而是将软链最终的目标文件复制到/etc/alternatives目录下。

3.2 重启agent服务重新生成软链

上面那种方式可以解决问题,当然我们也可以让CDH自己来完成软链的创建,可以通过如下方式来解决:

1.删除/etc/alternatives目录下所有异常的软连

[root@cdh02 alternatives]# rm -rf /etc/alternatives/*

在这里插入图片描述

2.删除opt/cloudera/parcls/目录下所有内容,并重启cloudera-scm-agent服务

在这里插入图片描述

3.重启cloudera-scm-agent服务后,会触发parcel分发动作,在完成parcel分发后会自动为所有服务创建软链
在这里插入图片描述
4.在分发后激活的过程中,就在重新生成软链

[root@cdh02 alternatives]# ll /etc/alternatives

在这里插入图片描述

6.可以看到软链都恢复成功,命令也都可以正常使用

在这里插入图片描述

注意:在问题分析章节看到软链指向CDH5.14.0目录,但在Fayson的环境中是没有CDH5.14.0的Parcel包,通过分析发现Agent服务在完成Parcel的激活后会通过读取/var/lib/alternatives目录下每个命令配置的链接地址来生成所有命令的软链信息。在Fayson的/var/lib/alternatives目录下hadoop等其他命令的配置文件中均包含了5.14.0的信息,从而导致生成的软链地址指向有误,如下图所示:

在这里插入图片描述

注意配置文件中的auto,如果为Manual则不会自动创建该命令的软链。

/var/lib/alternatives必须存在且不能为空,如果该目录下配置文件有问题可以自己手动修改或从其他没有问题的节点拷贝。

4 总结

1.复制带有软链的文件或目录时,需要用tar命令进行压缩在拷贝的方式,才能保留软链。

2.CDH集群节点上/etc/alternatives目录下的软链丢失或者损坏,可以通过拷贝正确节点的软链进行修复,也可以通过删除/etc/alternatives/*和/opt/cloudera/parcels/*下的内容通过重启cloudera-scm-agent服务触发Parcel分发激活操作自动生成。

3.导致上述问题的主要原因还是由于之前集群未卸载干净导致,所以新装、扩容、升级、降级等操作时要确保集群中没有与之相关的其它版本CDH文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值