温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。


Fayson的github:

​https://github.com/fayson/cdhproject​


提示:代码块部分可以左右滑动查看噢



1

问题现象


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


-bash: hadoop: command not found

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


  • 测试环境

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


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


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


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


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


同样可以看到/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目录下软链是否正确


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


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


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


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


3.打包成功,我们把tar包传到cdh03,然后解压。


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


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


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


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


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


如上图所示可以看到/etc/alternatives目录下的软链都已经正常。


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


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


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


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


3.2

重启agent服务重新生成软链


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

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


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


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


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


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


3.重启cloudera-scm-agent服务后,会触发parcel分发动作,在完成parcel分发后会自动为所有服务创建软链


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


4.在分发后激活的过程中,就在重新生成软链


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


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


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


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


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


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


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

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


4

总结


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


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


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


提示:代码块部分可以左右滑动查看噢


为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。


推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

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