记一次CDH集群升级事故的解决
admin
2021-03-08 09:21:17
0次

本文转载自微信公众号「明哥的IT随笔」,作者IT明哥。转载本文请联系明哥的IT随笔公众号。 

 01问题现象

某日明哥接到求助,集群运维人员在通过 cloudera manager 的 upgrade cluster 选项 (见下图一),升级 cdh 集群时遇到了问题,卡在了 "Execute command Upgrade Hive Metastore Database Schema on service Hive" 这一步。由于我们的应用系统是基于 Hive 的离线计算作业,hive升级不成功,应用应用无法启动,该问题亟待解决。

"Execute command Upgrade Hive Metastore Database Schema on service Hive" 这一步前的步骤是执行成功的,包括HDFS的升级:

02问题分析

查看cm页面上执行 "Execute command Upgrade Hive Metastore Database Schema on service Hive" 这一步时的 stdout 和 stderr 日志,其内容如下(页面日志没来得及截图,以下截图是当时复制出来的页面日志的内容):

stdout.log:

stderr.log:

查看hive metastore database 升级脚本的内容:

可见该升级脚本只是更改了 hive 的 mysql metastore db,更新了 hive 库中 DBS 表的结构 (增加了一列 create_time);并更新了 cdh_version表的一条记录。

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

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

(事实上 stdout.log 日志中也告诉了我们连接信息和用户名信息,跟上述配置是一致的:Metastore connection URL 是 jdbc:mysql://node1:3306/hive?useUnicode=true&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 中也屏蔽了该信息,如下所示:

方法三:通过 curl 访问 cm 提供的特定 restful 接口获取集群配置信息,包括 hive metastore 用户名和密码。

该接口的地址和访问方式是:curl -u cm-user:cm-pwd "http://cm-host:7180/api/v19/cm/deployment",示例如下:

04问题解决

在通过上述方法三,拿到了 hive metastore db 的正确用户名和密码后,在 hive 配置页面配置完毕正确的用户名和密码后,再次尝试升级集群(通过在 cm 的 Running Commands 页面,resume 恢复 upgrade cluster 命令即可),集群升级正确执行,直至结束,如下所示:

 

05HDFS 集群升级后的收尾

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

事实上,这是 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:

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

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

 

相关内容

热门资讯

自荐信要怎么写 自荐信要怎么写  1、语气自然 语言和句子要简单明了。不要听上去象别人的话,特别是用一些你从未用过的...
描写古代女子美貌的句子 导语:窈窕淑女,君子好逑,以下是小编精心为大家搜集整理的描写古代女子美貌的句子,供大家参考。描写古代...
过年回家句子 过年回家句子(精选95句)  在平平淡淡的日常中,大家都收藏过自己喜欢的句子吧,根据用途和语气,句子...
抖音点赞最火最高句子 抖音点赞最火最高句子  在平日的学习、工作和生活里,许多人对一些广为流传的句子都不陌生吧,根据用途和...
世界上最悲伤的句子   1、年少青春在还没有经受起挥霍时就已经不复长存,青梅竹马也只是儿时无知岁月用来消遣光阴的无谓道具...
生活积极的句子 关于生活积极的句子  也许一个人,要走过很多的路,经历过生命中无数突如其来的繁华和苍凉后,才会变的成...
激励上进的正能量句子 激励上进的正能量句子  在我们平凡的日常里,大家总少不了接触一些耳熟能详的句子吧,在不同类型的文章里...
纪念烈士缅怀先烈的句子 2022纪念烈士缅怀先烈的句子(精选65句)  在现实生活或工作学习中,大家都接触过比较经典的句子吧...
回归家乡的句子 回归家乡的句子  句子是语言运用的基本单位,它由词、词组(短语)构成,能表达一个完整的意思,如告诉别...
描写小兔子的段落 描写小兔子的段落大全  1、兔子浑身长满了毛茸茸的白毛,远远看去像一团棉花。它的一双红眼睛被白毛包住...