今天偶尔发现一个CDH集群中的Hive MetaStore Server发生了异常,于是检查相关日志,具体日志为Hive MetaStore Server所在节点的/var/log/hive/hadoop-cmf-hive-HIVEMETASTORE-sbh01.esgyn.cn.log.out,日志报错如下,

2019-10-31 06:22:51,467 INFO  org.apache.hadoop.hive.metastore.HiveMetaStore: [pool-5-thread-199]: 199: source:172.31.232.22 get_table : db=cloudera_manager_metastore_canary_test_db_hive_HIVEME
TASTORE_89c6545c32a1b6da390011bba5c4799a tbl=CM_TEST_TABLE
2019-10-31 06:22:51,467 INFO  org.apache.hadoop.hive.metastore.HiveMetaStore.audit: [pool-5-thread-199]: ugi=hue        ip=172.31.232.22        cmd=source:172.31.232.22 get_table : db=cloudera_
manager_metastore_canary_test_db_hive_HIVEMETASTORE_89c6545c32a1b6da390011bba5c4799a tbl=CM_TEST_TABLE
2019-10-31 06:22:51,470 ERROR org.apache.hadoop.hive.metastore.RetryingHMSHandler: [pool-5-thread-199]: Retrying HMSHandler after 2000 ms (attempt 4 of 10) with error: javax.jdo.JDOException: E
xception thrown when executing queryat org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:596)at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:275)at org.apache.hadoop.hive.metastore.ObjectStore.getMTable(ObjectStore.java:1217)at org.apache.hadoop.hive.metastore.ObjectStore.getTable(ObjectStore.java:1024)at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:606)at org.apache.hadoop.hive.metastore.RawStoreProxy.invoke(RawStoreProxy.java:103)at com.sun.proxy.$Proxy6.getTable(Unknown Source)at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.get_table_core(HiveMetaStore.java:1950)at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.get_table(HiveMetaStore.java:1905)at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:606)at org.apache.hadoop.hive.metastore.RetryingHMSHandler.invokeInternal(RetryingHMSHandler.java:140)at org.apache.hadoop.hive.metastore.RetryingHMSHandler.invoke(RetryingHMSHandler.java:99)at com.sun.proxy.$Proxy8.get_table(Unknown Source)at org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$Processor$get_table.getResult(ThriftHiveMetastore.java:10128)at org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$Processor$get_table.getResult(ThriftHiveMetastore.java:10112)at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)at org.apache.hadoop.hive.metastore.TUGIBasedProcessor$1.run(TUGIBasedProcessor.java:110)at org.apache.hadoop.hive.metastore.TUGIBasedProcessor$1.run(TUGIBasedProcessor.java:106)at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:415)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1924)at org.apache.hadoop.hive.metastore.TUGIBasedProcessor.process(TUGIBasedProcessor.java:118)at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:286)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run(Thread.java:745)
NestedThrowablesStackTrace:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'A0.OWNER_TYPE' in 'field list'at sun.reflect.GeneratedConstructorAccessor20.newInstance(Unknown Source)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:526)at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)at com.mysql.jdbc.Util.getInstance(Util.java:387)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)

根据错误信息,我们怀疑是Hive的元数据库表出现了问题,根据错误信息,大概是表CM_TEST_TABLE的OWNER_TYPE字段没找到。
于是我们去Hive的元数据库MYSQL中查询此表并希望检查此字段,不过并没有找到(可能是表存在但没找着位置)。由于此环境是一个测试环境,我们决定先采用删除Hive并重装的方式来绕过。于是从CM管理界面把Hive整个组件删除并重新添加,添加后发现启动Hive过一小会儿后仍然报同样的错。这是因为MYSQL元数据库中的Hive数据库仍然是有问题,删除Hive组件并没有删除MYSQL中的Hive数据库。
因此,我们决定先删除MySQL中的Hive数据库并对Hive数据库进行初始化。那么问题来了,在删除Hive数据库时不小心删错了库,把MYSQL库删除了。。。执行的命令为:

/usr/share/mysql-5.6.31/bin/mysql -u root --password='xxx'
show databases;
drop database mysql;

删除了mysql库之后,我们发现再创建hive user时报错无法创建,这是因为mysql的database下面有张user表,所有的用户信息都存放于mysql.user里面。

现在mysql的database整个没有了,需要想办法恢复mysql这个database。我们从另外一套测试集群中进行mysql元数据库,查看发现mysql的数据库下面有28张表,部分表中有数据,表列表如下,

mysql> use mysql;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
28 rows in set (0.00 sec)

于是我们使用mysqldump命令把这些表结构和数据导出成一个文件,命令如下,

/usr/local/mysql/bin/mysqldump -uroot --password='xxx' --databases mysql >mysql.sql

将此文件拷贝到问题集群上,在mysql中执行此文件创建相应的表结构并导入数据,执行之后使用update语句更新其中的几条数据,因为有几条数据保存的IP和机器名是原环境的信息。

/usr/share/mysql-5.6.31/bin/mysql -u root --password='xxx' < mysql.sql
--需要更新以下几个数据
use mysql;
update user set host='172.31.232.22' where host='172.31.234.1';
update user set host='sbh02.esgyn.cn' where host='uathx02.esgyn.cn';
update user set host='sbh01.esgyn.cn' where host='uathx01.esgyn.cn';
update proxies_priv set host='sbh01.esgyn.cn' where host='uathx01.esgyn.cn';

现在,mysql的数据库算是已经恢复了,由于导出的mysql环境和目标环境里面的用户信息和密码基本都是一致的,我们也不需要特意去修改mysql.user表里面的信息,而且也不用再创建hive用户了,因为mysql.user表中已经有相应的记录了,我们需要做的就是删除MYSQL元数据库中的hive这个数据库并重新创建一个空的库,

/usr/share/mysql-5.6.31/bin/mysql -uroot --password='xxx'
drop database hive;
create database hive;

现在,我们再次从CM管理界面重新添加Hive组件并启动,此时Hive终于恢复了正常!

CDH HIVE报错引发的一系列血案相关推荐

  1. 安装CDH Hive报错

    在使用Cloudera Manager安装Hive的时候,报错如下: Failed to retrieve schema tables from Hive Metastore DB,Not suppo ...

  2. Hive报错FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask

    Hive报错Error while processing statement: FAILED: Execution Error, return code 3 from org.apache.hadoo ...

  3. #Hive报错 WritableStringObjectInspector cannot be cast to org.apache.hadoop.hive.serde2.objectinspect

    #Hive报错 FAILED: ClassCastException org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableS ...

  4. 启动hive报错:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang

    报错详情: b/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf ...

  5. Hive报错java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonFactory

    一 问题 Hive报错java.lang.NoClassDefFoundError:org/codehaus/jackson/JsonFactory 二 原因 Hadoop版本是0.20.2.$HAD ...

  6. hive报错Could not get block locations. Source file “/user/hive/warehouse/xxx

    hive报错 Could not get block locations. Source file "/user/hive/warehouse/xxx... 以及 Caused by: or ...

  7. (详细)解决hive报错FAILED: SemanticException Cartesian products are disabled for safety的问题

    在使用hive-2.3.3执行TPC-H benchmark时,遇到hive报错.而且这个错误不是以Java异常栈的形式跑出的,很可能被忽略: FAILED: SemanticException Ca ...

  8. sqoop将oracle数据导入到hive报错:Error: java.io.IOException: SQLException in nextKeyValue

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 问题 一.问题是什么导致的? 二.验证问题 总结 问题 sqoop将oracle数据导入到hive报错:Error: jav ...

  9. hive报错(org.apache.hadoop.hdfs.server.namenode.SafeModeException): Cannot create directory/tmp/hive/.

    报错场景: 使用shell脚本进行对hive的数据查询导入导致出错,先是hive执行时间较长,后面hive报错. 问题描述: 使用jps查询进程,发现有三个hive进程,三个RunJar,RunJar ...

最新文章

  1. CVPR2020 - SLAM workshop 在线盛会预告
  2. mysql 随机选择数据_从MySQL随机选取数据
  3. Springboot使用bean方式详解(附代码)
  4. ajax 在新选卡打开,JavaScript在新窗口中打开,而不是选项卡
  5. android学习笔记九——RatingBar
  6. javascript window.open
  7. 在leveldb中,为什么要有immutable memtable?
  8. java tomcat eclipse 环境变量配置
  9. 将当前的Git分支设为主分支
  10. Hibernate与mybatis比较
  11. JAVA-SE基础篇-位运算
  12. 小儿持续高烧不退的护理办法和相关病理分析
  13. 谷歌开发者大会焦点:TensorFlow.js可制作微信小程序,Android 10原生支持5G,TF2.0大更新...
  14. SV,class学习笔记五、参数化类(parameterized class)
  15. 大厂程序员裸辞,全职接单一个月的感触!
  16. 毕业论文答辩の七个原则(硕士)
  17. 说一千道一万,这次IIS发布access遇到的问题是32位兼容问题
  18. Elasticsearch插件之分词器
  19. h0093. 字符串最大跨距
  20. 使用Yolov5训练自己制作的数据集,快速上手

热门文章

  1. Python编程语言学习:python语言中快速查询python自带模块函数的用法及其属性方法、如何查询某个函数关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略
  2. 搭建PCLint与SourceInsight全套环境
  3. unity3d射箭模拟小游戏
  4. 利用html编码进行xss攻击
  5. uni-app - 基于uView的base-navbar实现
  6. i am biter 逆置为:biter am i
  7. 关于微信支付的一个坑,在此记录一下。
  8. 关于运放失调电压调试及其反思
  9. 5分钟民兴教你看懂征信报告内容,用卡的朋友注意了!
  10. 知识付费平台有几种?现在怎么运作的?