记一次CDH集群升级事故的解决
本文转载自微信公众号「明哥的IT随笔」,作者IT明哥。转载本文请联系明哥的IT随笔公众号。
01问题现象
某日明哥接到求助,集群运维人员在通过 cloudera manager 的 upgrade cluster 选项 (见下图一),升级 cdh 集群时遇到了问题,卡在了 "Execute mand Upgrade Hive Metastore Database Schema on service Hive" 这一步。由于我们的应用系统是基于 Hive 的离线计算作业,hive升级不成功,应用应用无法启动,该问题亟待解决。
"Execute mand Upgrade Hive Metastore Database Schema on service Hive" 这一步前的步骤是执行成功的,包括HDFS的升级
02问题分析
查看cm页面上执行 "Execute mand 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-pd "http://cm-host:7180/api/v19/cm/deployment",示例如下
04问题解决
在通过上述方法三,拿到了 hive metastore db 的正确用户名和密码后,在 hive 配置页面配置完毕正确的用户名和密码后,尝试升级集群(通过在 cm 的 Running Commands 页面,resume 恢复 upgrade cluster 命令即可),集群升级正确执行,直至结束,如下所示
05HDFS 集群升级后的收尾
做过 hdfs 集群升级的小伙伴,会留意到,通过以上步骤升级完毕集群后,hdfs 集群可以正常对外提供读写服务,但在 hdfs 的 eb 页面会有个提示信息 "upgrade in progress. not yet finalized",如下所示
事实上,这是 hdfs 有意为之的升级机制hdfs 允许用户在集群升级完毕后,对集群进行充分的业务测试和验证,确保一切无误后,才来 finalize , 即 mit 整个 update;如果业务验证失败,可以回滚到升级前的版本。"Finalizing upgrade is separate process that should be invoked manually after you confirm that data migration ent ell。"
我们执行命令 hdfs dfsadmin -finalizeUpgrade 进行升级后的 finalize:
查看hdfs eb ui,提示信息不见了
06key take-aays
汇总下知识点
1. hive metastore db 的用户名和密码,可以通过以下命令获得
curl -u cm-user:cm-pd "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./docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html
https://hadoop.apache./docs/current/hadoop-project-dist/hadoop-hdfs/HdfsRollingUpgrade.html
人工智能培训
- 真正能和人交流的机器人什么时候实现
- 国产机器人成功完成首例远程冠脉介入手术
- 人工智能与第四次工业革命
- 未来30年的AI和物联网
- 新三板创新层公司东方水利新增专利授权:“一
- 发展人工智能是让人和机器更好地合作
- 新春贺喜! 经开区持续推进工业互联网平台建设
- 以工业机器人为桥 传统企业如何趟过智造这条河
- 山立滤芯SAGL-1HH SAGL-2HH
- 2015国际智能星创师大赛火热报名中!
- 未来机器人会咋看人类?递归神经网络之父-像蚂
- 成都新川人工智能创新中心二期主体结构封顶
- 斯坦德机器人完成数亿元人民币C轮融资,小米产
- 到2020年,智能手机将拥有十项AI功能,有些可能
- 寻找AI机器人的增长“跳板”:老龄化为支点的产
- 力升高科耐高温消防机器人参加某支队性能测试