1、hive metastore 启动后自动退出
报错信息:
Caused by: javax.jdo.JDODataStoreException: Exception thrown obtaining schema column information from datastore
NestedThrowables:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'cdhmetastore.DELETEME1629982681435' doesn't exist
at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:543)
at org.datanucleus.api.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:729)
at org.datanucleus.api.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:749)
at org.apache.hadoop.hive.metastore.ObjectStore.addRole(ObjectStore.java:4975)
at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.hive.metastore.RawStoreProxy.invoke(RawStoreProxy.java:97)
at com.sun.proxy.HMSHandler.createDefaultRoles_core(HiveMetaStore.java:805)
at org.apache.hadoop.hive.metastore.HiveMetaStoreHMSHandler.init(HiveMetaStore.java:539)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.hive.metastore.RetryingHMSHandler.invokeInternal(RetryingHMSHandler.java:147)
... 13 more
根据提示的信息,登陆mysql或者mysql客户端查看hive的数据库的表信息
mysql -u root -p
mysql> use hive;
mysql> show tables;
+—————————+
| Tables_in_hive |
+—————————+
| BUCKETING_COLS |
| CDS |
| COLUMNS_V2 |
| DATABASE_PARAMS |
| DBS |
| DELETEME1629982681435 |
| IDXS |
| INDEX_PARAMS |
| PARTITIONS |
| PARTITION_KEYS |
| PARTITION_KEY_VALS |
| PARTITION_PARAMS |
| PART_COL_PRIVS |
| PART_COL_STATS |
| PART_PRIVS |
| SDS |
| SD_PARAMS |
| SEQUENCE_TABLE |
| SERDES |
| SERDE_PARAMS |
| SKEWED_COL_NAMES |
| SKEWED_COL_VALUE_LOC_MAP |
| SKEWED_STRING_LIST |
| SKEWED_STRING_LIST_VALUES |
| SKEWED_VALUES |
| SORT_COLS |
| TABLE_PARAMS |
| TAB_COL_STATS |
| TBLS |
| TBL_COL_PRIVS |
| TBL_PRIVS |
+—————————+
36 rows in set (0.00 sec)
能够看到“DELETEME1629982681435”这个表,问题明确了,由于计算的压力过大,服务器停止响应,mysql也停止了响应,mysql进程被异常终止,在运行中的mysql表数据异常,hive的元数据表异常。
解决问题的办法有两个:
- 直接在mysql中drop 异常提示中的table;
mysql>drop table DELETEME1629982681435; - 保守的做法,根据DELETEME*表的结构,创建不存在的表
CREATE TABLEDELETEME1629982681435
(UNUSED
int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
通过实践,第一个方法就能够解决问题,如果不行可以尝试第二个方法。
总结:hive、hadoop的上层异常原因可能很多情况导致,一定要找到真正的问题原因,不能急于尝试网上异常的解决办法。hive的元数据依赖关系型数据库,一定做好数据库的备份
又碰到一个hive的Exception,Caused by: org.apache.hadoop.hive.ql.parse.SemanticException: Unable to fetch table XXX,追溯更直接的原因,找到Caused by: java.sql.SQLException: Got error 28 from storage engine。
问题原因:服务器的根目录的/tmp中日志文件生成过多,磁盘空间满了。以SemanticException: Unable to fetch table关键字在google中搜索,发现结果很少,也没什么有价值的信息,搜索结果是这种情况,说明这个问题不常见,很可能是其他低级错误导致的问题。
网友评论