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

本篇文章为大家展示了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 日志,其内容如下(页面日志没来得及截图,以下截图是当时复制出来的页面日志的内容):

stdout.log:

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&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 用户名和密码。

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

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

04问题解决

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

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


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 最终确认升级,也可以回滚到之前版本。

上述内容就是CDH集群升级事故的解决方法是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


本文题目:CDH集群升级事故的解决方法是什么
分享路径:http://ybzwz.com/article/gsdegg.html