hive metastore日志中报错:
Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
      at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:444)
      at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:672)
      at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:606)
      at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
     at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
 Caused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
     at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1449)
     at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.java:63)
     at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:73)
     at org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:2661)
     at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:2680)
     at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:425)
     ... 8 more
 Caused by: java.lang.reflect.InvocationTargetException
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
     at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
     at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1447)
     ... 13 more
 Caused by: MetaException(message:Metastore contains multiple versions)
     at org.apache.hadoop.hive.metastore.ObjectStore.getMSchemaVersion(ObjectStore.java:6643)
     at org.apache.hadoop.hive.metastore.ObjectStore.getMetaStoreSchemaVersion(ObjectStore.java:6605)
     at org.apache.hadoop.hive.metastore.ObjectStore.checkSchema(ObjectStore.java:6564)
     at org.apache.hadoop.hive.metastore.ObjectStore.verifySchema(ObjectStore.java:6552)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
     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:98)
     at com.sun.proxy.$Proxy5.verifySchema(Unknown Source)
     at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMetaStore.java:539)
     at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:587)
     at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:429)
     at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:66)
     at org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:72)
     at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:5554)
     at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:178)
     at org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient.<init>(SessionHiveMetaStoreClient.java:73)

因为hive metastore存储在mysql中,所以登录mysql,use hive所使用的DB,然后 查询下VERSION表
mysql> select * from VERSION;
+--------+----------------+------------------+
| VER_ID | SCHEMA_VERSION | VERSION_COMMENT  |
+--------+----------------+------------------+
|      1 | 0.14.0         | Set by MetaStore |
+--------+----------------+—————————+
|     16 | 0.14.0         | Set by MetaStore |
+--------+----------------+—————————+

问题已经通过删除多余的版本记录解决,

保留第一条记录,其他记录全部删除
delete from VERSION where VER_ID=16;
或者
delete from VERSION where VER_ID !=1;

出现这类异常问题原因,hive 是不支持并发的,估计不小心启动多个hive,也可能是网络问题,反正很诡异;

网上有些解决方法,为了避免这种问题再次出现,请在hive客户端开启以下配置项:

<property>
  <name>hive.metastore.schema.verification</name>
  <value>true</value>
</property>

开启该选项后,重启hive客户端和MetaStore Server。

hive.metastore.schema.verification:
强制metastore的schema一致性,开启的话会校验在metastore中存储的信息的版本和hive的jar包中的版本一致性,并且关闭自动schema迁移,用户必须手动的升级hive并且迁移schema,关闭的话只会在版本不一致时给出警告,默认是false不开启;

但是以上方法为证明可以解决这个问题,而且我的环境下存在多版本hive客户端,如果设置为True可能会影响hive客户端提交任务,为采用这个方式。

网上查到有锁表lock tables VERSION read;的命令,但是退出终端或者重启mysql就会失效,无法使用
开始尝试想让这个VERSION表只读,但是没有好的方法。
mysql没有对单一表进行查询权限及其他所有表进行所有权限设置。
mysql设置只能针对没一个表逐一设置下权限,这样的风险太大不建议线上hive表操作。
hive表有53个,想对VERSION设置只读,那就需要删除现有hive用户权限,对VERSION表设置select权限,其他52个表一个个设置GRANT ALL权限,这可是生产环境,不建议这么操作。

现在想到解决方法:
写个shell定时去删除VERSION表中VER_ID 不等于1的数据,这个方法就比较难维护,时间长就忘记了。

其实这样的情况很少出现,一次删除多余的数据,也是可以的,有时候不要较真。
这个问题是hive版本的bug在新版本中不存在,我在测试环境hive1.1.0,建立多条数据也没有问题

脚本:
cat check_hive.sh
#!/bin/bash
export PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/root/bin

#用户和密码
DBUSER="hive"
DBPW="123456789"
DATE=`date +%Y%m%d%H%m%S`
OUTFILE=/tmp/check_hive.log
#读取第二行,因为第一行是count(*)
st=$(/usr/bin/mysql -u$DBUSER -p$DBPW  -e 'select count(*) from hive.VERSION;'|sed -n '2p')
echo "$st"
#判断下如何是一行显示正常,不是一行就删除VER_ID不等于1的
if [ "$st" == 1 ]
then
    echo "$DATE hive.VERSION count = 1" >> $OUTFILE
else
    /usr/bin/mysql -u$DBUSER -p$DBPW  -e 'delete from hive.VERSION where VER_ID !=1;' && echo "$DATE hive.VERSION count != 1 , delete table data!" >> $OUTFILE
fi

查看数据
mysql> select * from VERSION;
+--------+----------------+------------------+
| VER_ID | SCHEMA_VERSION | VERSION_COMMENT  |
+--------+----------------+------------------+
|      1 | 0.14.0         | Set by MetaStore |
+--------+----------------+------------------+

参考命令:
use hive;
锁表
lock tables VERSION read;
解锁表
mysql>unlock tables;
LOCK TABLES为当前线程锁定表。 UNLOCK TABLES释放被当前线程持有的任何锁。当线程发出另外一个LOCK TABLES时,或当服务器的连接被关闭时,当前线程锁定的所有表会自动被解锁。
insert into VERSION  values('1.1.0','Hive release version 1.1.0');

查看是否有锁表
SHOW PROCESSLIST;

查看锁
mysql> show global status like "table_locks%";

查看表级锁的征用情况
mysql> show status like 'table%';

mysql> show grants for 'hive'@'%';
show grants for hive;

插入数据
insert into VERSION values(2,'1.1.0','Hive release version 1.1.0');

删除数据
delete from VERSION where VER_ID=2;

删除权限
revoke ALL PRIVILEGES ON `hive`.* TO 'hive'@'%'

设置权限
grant select ON hive.VERSION TO 'hive'@'%';

刷新授权
flush privileges ;

hive库中表
mysql> show tables;
+---------------------------+
| Tables_in_hive            |
+---------------------------+
| BUCKETING_COLS            |
| CDS                       |
| COLUMNS_V2                |
| COMPACTION_QUEUE          |
| COMPLETED_TXN_COMPONENTS  |
| DATABASE_PARAMS           |
| DBS                       |
| DB_PRIVS                  |
| DELEGATION_TOKENS         |
| DELETEME1480404975708     |
| FUNCS                     |
| FUNC_RU                   |
| GLOBAL_PRIVS              |
| HIVE_LOCKS                |
| IDXS                      |
| INDEX_PARAMS              |
| MASTER_KEYS               |
| NEXT_COMPACTION_QUEUE_ID  |
| NEXT_LOCK_ID              |
| NEXT_TXN_ID               |
| NUCLEUS_TABLES            |
| PARTITIONS                |
| PARTITION_EVENTS          |
| PARTITION_KEYS            |
| PARTITION_KEY_VALS        |
| PARTITION_PARAMS          |
| PART_COL_PRIVS            |
| PART_COL_STATS            |
| PART_PRIVS                |
| ROLES                     |
| ROLE_MAP                  |
| 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                 |
| TXNS                      |
| TXN_COMPONENTS            |
| TYPES                     |
| TYPE_FIELDS               |
| VERSION                   |

+---------------------------+
参考:
http://blog.csdn.net/wisgood/article/details/45742039
http://blog.chinaunix.net/uid-21505614-id-289450.html
https://my.oschina.net/ghostmanyue/blog/500684
http://blog.csdn.net/youngqj/article/details/19987727

hive metastore日志中报错message:Metastore contains multiple versions相关推荐

  1. @hapi/joi 报错 “message“: “Cannot mix different versions of joi schemas“

    问题: 使用 @hapi/joi 报错 "message": "Cannot mix different versions of joi schemas" np ...

  2. Contabs日志中报错:No MTA installed, discarding output

    在运行contabs的过程中,我们通过 vim /var/log/cron.log 命令查看当前contabs的运行状态. 在日志中,每运行一次自定义的定时任务,就会报错一次,错误内容为: No MT ...

  3. hive安装过程中报错处理办法

    1.第一个错:(路径错误) Exception in thread "main" java.lang.IllegalArgumentException: java.net.URIS ...

  4. Spark操作sparkSql报错:metastore.ObjectStore: Version information found in metastore differs 2.3.0 from e

    Spark操作sparkSql报错:metastore.ObjectStore: Version information found in metastore differs 2.3.0 from e ...

  5. hive.ql.exec.DDLTask. MetaException(message:java.io.IOException: Attempt to start meta tracker faile

    Hive 0.13和HBase 0.98.6.1整合出现错误记录下 hive> CREATE TABLE hbase_table_1(key int, value string) > ST ...

  6. hive安装 初始化报错Error: Duplicate key name ‘PCS_STATS_IDX‘ (state=42000,code=1061)

    错误日志 [root@mihaoyu151 conf]# schematool -dbType mysql -initSchema which: no hbase in (/usr/local/sbi ...

  7. hive连接mysql报错_hive远程模式初始化mysql报错

    hive的远程模式需要mysql数据库,需要安装mysql数据库, 创建mysql 数据库用于存储hive的原信息 create database hive DEFAULT CHARSET utf8 ...

  8. web前端知识点太多_前端知识点总结——框架中报错集锦(含解决方法)

    前端知识点总结--框架中报错集锦(含解决方法) 1.vue 1.指定template直接返回多个标签 Component template should contain exactly one roo ...

  9. oracle until freed,Oracle中报错Connect internal only, until freed

    Oracle中报错Connect internal only, until freed属于归档日志满了. 有两种方法可以解决,第一种是删除归档日志,第二种是增大闪回日志文件的最大大小 SQL> ...

最新文章

  1. 倒计时7天!博客之星虚位以待,Macbook等你来拿
  2. python3 字符串截取
  3. 每日一皮:修Bug的真实情况...
  4. 一步一个脚印学习WCF系列之WCF基础术语—绑定(Binding)(五)
  5. 2018暑假集训测试六总结
  6. ansible常用基础命令整合
  7. java批量插入PostgreSql
  8. 决策树——信息熵的学习笔记
  9. ZipArchive是一个开源的zip开发包工具。
  10. go语言环境搭建以及监测命令
  11. 词云python灿烈,Python jieba分词、词云、文件读取、函数调用、匿名函数
  12. Skype for business 界面自动弹出打开
  13. ContentNegotiation内容协商机制(一)---Spring MVC内置支持的4种内容协商方式【享学Spring MVC】
  14. Python使用百度地图API实现地点信息转换及房价指数热力地图
  15. PostScript 与 Encapsulated PostScript
  16. excel日期转换为周数_VBA将日期转换为周数
  17. 协同办公风口来袭,在线文档顺势崛起!
  18. java查找文件路径_如何查找java路径?
  19. iphone重启记录_如何阻止您的iPhone记录您的常用位置
  20. 葫芦灸,拥抱葫芦灸走过的日子,不负韶华。

热门文章

  1. 数组-数字组合II-中等
  2. 计算机求职英语作文,英语作文_计算机专业大学毕业生求职信范文_沪江英语
  3. 云原生开发者训练营启动!3天教会你玩转Serverless
  4. arduino平衡车超声波_Arduino Nano DIY超声波测距平衡小车源码与资料分享
  5. 知+付费推广:我花3W烧出来的投放经验
  6. 宇视NVR如何使用RTSP协议添加相机
  7. 解除360个人图书馆文档禁止复制限制Chrome浏览器插件
  8. 无线路由器的基础配置(三)
  9. link2sd或者app2sd前的分区——SD卡分区教程 link2sd教程 app2sd教程
  10. 光伏电站远程监控应用方案