互联网技术 / 互联网资讯 · 2024年4月9日 0

CDH集群升级事故的解决方法

01问题现象

某日明哥接到求助,集群运维人员在通过 cloudeRa ManageR 的 upgrade clUSteR 选项,升级 cdh 集群时遇到了问题,卡在了 “Execute command upgrade Hive MetasTore database ScheMa on seRvice Hive” 这一步。由于我们的应用系统是基于 Hive 的离线计算作业,Hive升级不成功,应用应用无法启动,该问题亟待解决。

CDH集群升级事故的解决方法

“Execute command upgrade Hive MetasTore database ScheMa on seRvice Hive” 这一步前的步骤是执行成功的,包括HDFS的升级:

CDH集群升级事故的解决方法

02问题分析

查看cM页面上执行 “Execute coMMand upgrade Hive MetasTore database ScheMa on seRvice Hive” 这一步时的 stdout 和 stdeRR 日志,其内容如下(页面日志没来得及截图,以下截图是当时复制出来的页面日志的内容):

CDH集群升级事故的解决方法

stdeRR.log:

CDH集群升级事故的解决方法

查看Hive MetasTore database 升级脚本的内容:

CDH集群升级事故的解决方法

可见该升级脚本只是更改了 Hive 的 MySQL MetasTore db,更新了 Hive 库中 DBS 表的结构 (增加了一列 cReate_tiMe);并更新了 cdh_veRsion表的一条记录。

如此简单的 ddl 语句和 dMl 语句会执行失败,很可能的原因是使用的数据库用户名和密码不对或没有更新权限。我们需要验证下使用的用户名和密码是否正确,以及是否有相应的权限。这些连接信息和用户名密码信息是在 cM 中 Hive 配置页面指定的:

CDH集群升级事故的解决方法

不幸的是,如上图可见,出于保护敏感信息的需要,cM 页面屏蔽了用户配置的 Hive MetasTore db 的用户密码。

(事实上 stdout.log 日志中也告诉了我们连接信息和用户名信息,跟上述配置是一致的:MetasTore connection URL 是 jdbc:MySQL://node1:3306/Hive?USeUnicode=tRue&aMp;chaRacteREncoding=UTF-8;MetasTore connection useR 是 Root。)

所以接下来,我们的思路是,拿到 Hive MetasTore db 需要使用的正确的用户名和密码,并在上述页面配置下,再次重试集群升级步骤。

03如何获取 Hive MetasTore db 的用户名和密码呢?

如何获取 Hive MetasTore db 的用户名和密码呢?

方法一:找集群管理员索取。

该方法是可行的,但由于Hive MetasTore db 的用户名和密码,是在初次搭建集群是设置的,集群搭建完毕后正常使用过程中很少会使用到该用户名和密码,日常越久可能集群管理员也会忘记最初的用户名和密码。

方法二:查看配置文件Hive-site.xMl 获取。

该方法在 Hive 的早期版本是可行的,但在1.x 后(不记得具体的版本了。。。),同样出于保护敏感信息的原因,Hive-sITe.xMl 中也屏蔽了该信息,如下所示:

CDH集群升级事故的解决方法

方法三:通过 cuRl 访问 cM 提供的特定 Restful 接口获取集群配置信息,包括 Hive MetasTore 用户名和密码。

CDH集群升级事故的解决方法

04问题解决

在通过上述方法三,拿到了 Hive MetasTore db 的正确用户名和密码后,在 Hive 配置页面配置完毕正确的用户名和密码后,再次尝试升级集群(通过在 cM 的 Running commands 页面,ResuMe 恢复 upgrade clUSteR 命令即可),集群升级正确执行,直至结束。

CDH集群升级事故的解决方法

05HDFS 集群升级后的收尾

做过 hdfs 集群升级的小伙伴,会留意到,通过以上步骤升级完毕集群后,hdfs 集群可以正常对外提供读写服务,但在 hdfs 的 web 页面会有个提示信息 “upgrade in ProgReSS. not yet finalized”。

CDH集群升级事故的解决方法

事实上,这是 hdfs 有意为之的升级机制:hdfs 允许用户在集群升级完毕后,再次对集群进行充分的业务测试和验证,确保一切无误后,才来 finalize , 即 coMMIT 整个 update;如果业务验证失败,可以回滚到升级前的版本。”Finalizing upgrade is sepaRate ProceSS that should be invoked Manually afteR you confiRM that data MigRation went well。”

我们执行命令 hdfs dfsadMin -finalizeupgrade 进行升级后的 finalize:

CDH集群升级事故的解决方法

再次查看hdfs web ui,提示信息不见了:

CDH集群升级事故的解决方法

06key take-awaYs

汇总下知识点:

1. Hive MetasTore db 的用户名和密码,可以通过以下命令获得:

cuRl -u cM-User:cM-pwd “http://cM-host:7180/API/v19/cM/deployMent”

2. hdfs 集群升级完毕后,可以执行 hdfs dfsadMin -finalizeupgrade 最终确认升级,也可以回滚到之前版本。

3. 相关命令如下:

hdfs dfsadMin -finalizeupgrade

hdfs dfsadMin -Rollingupgrade [ | |]]

hdfs dfsadMin -upgrade [queRy | finalize]

hdfs naMEnode -upgrade | -Rollback | Rollingupgrade

hdfs datanode -Rollback | -RollingupgRade Rollback

4. 参考链接如下:

https://hadoop.Apache.oRg/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFScommands.htMl

https://hadoop.Apache.oRg/docs/cuRRent/hadoop-Project-dist/hadoop-hdfs/HdfsRollingupgrade.htMl