MetaException(message:Hive Schema version 2.3.0 does not match metastore's schema version 1.2.0

本文介绍在Spark 2.2.0环境下创建Hive表时遇到的版本不匹配错误,并提供两种解决方案:一是临时修改MySQL metastore数据库中的schema版本;二是采用远程metastore模式或通过CDH进行版本协调。

环境
spark 2.2.0 hive 2.3.3
问题
用spark应用创建一张hive表后,在通过hive shell来操作hive时报如下错;

MetaException(message:Hive Schema version 2.3.0 does not match metastore's schema version 1.2.0

原因
spark应用创建表时,指定的schema版本为1.2.0,而hive的schema版本为2.3.0,版本不兼容导致
解决办法
临时解决:
在mysql(假定metastore的数据库为mysql)中,切换到hive库,执行如下命令

    UPDATE VERSION SET SCHEMA_VERSION='2.3.0', VERSION_COMMENT='fix conflict' where VER_ID=1;

这样解决后,当通过spark应用再创建新表时仍会报错。
更好的解决:
1. metastore模式使用remote方式
2. 通过cdh来解决版本问题

MetaException(message:Hive Schema version 3.1.0 does not match metastore&#39;s schema version 2.3.0 Metastore is not upgraded or corrupt) at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:84) at org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:93) at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:8672) at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:8667) at org.apache.hadoop.hive.metastore.HiveMetaStore.startMetaStore(HiveMetaStore.java:8937) at org.apache.hadoop.hive.metastore.HiveMetaStore.main(HiveMetaStore.java:8854) 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.util.RunJar.run(RunJar.java:318) at org.apache.hadoop.util.RunJar.main(RunJar.java:232) Caused by: MetaException(message:Hive Schema version 3.1.0 does not match metastore&#39;s schema version 2.3.0 Metastore is not upgraded or corrupt) at org.apache.hadoop.hive.metastore.ObjectStore.checkSchema(ObjectStore.java:9099) at org.apache.hadoop.hive.metastore.ObjectStore.verifySchema(ObjectStore.java:9063) 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.RawStoreProxy.invoke(RawStoreProxy.java:97) at com.sun.proxy.$Proxy22.verifySchema(Unknown Source) at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMSForConf(HiveMetaStore.java:699) at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMet
最新发布
03-24
<think>好的,我现在要解决用户遇到的Hive Schema版本不匹配的问题,具体是Hive Schema version 3.1.0metastore的2.3.0不一致。用户提到可能元存储未升级或损坏,需要找到解决方法。 首先,我得回忆一下之前处理类似问题的经验。根据用户提供的引用内容,比如引用[1]到[5],常见的解决方法包括升级metastore的schema版本、关闭版本验证,或者修改数据库中的版本号。不过用户的情况是3.1.02.3.0的不匹配,可能涉及更高版本的Hive,所以需要确认步骤是否适用。 接下来,我需要考虑用户的环境。用户可能同时使用了SparkHive,导致版本冲突,如引用[3]中提到的情况。这时候需要确认HiveSpark的版本是否兼容,或者是否在升级Hive后没有正确升级metastore。 然后,用户可能已经尝试过某些方法但未成功,比如修改hive-site.xml中的参数,或者手动更新数据库版本。现在需要更详细的步骤,比如如何正确执行升级命令,或者如何检查元存储是否损坏。 另外,用户的问题可能涉及到两种解决方法:一种是真正升级元数据存储到3.1.0,另一种是绕过版本检查,但这可能带来稳定性风险。需要根据用户的需求,比如生产环境还是测试环境,推荐合适的解决方案。 还要注意,用户提供的引用中提到修改MySQL中的版本号,比如引用[4],但直接修改数据库版本可能存在风险,需谨慎操作。正确的做法应该是使用Hive自带的升级工具,如schematool来执行升级。 最后,需要总结步骤,确保用户能够逐步操作,并提醒备份数据,避免数据丢失。同时,生成相关问题,帮助用户进一步理解可能遇到的其它问题,比如如何降级或如何预防此类问题。</think>### 逐步解决方案 #### 问题分析 Hive Schema版本不匹配错误(3.1.0 vs 2.3.0)表明以下两种可能性: 1. **元存储未升级**:Hive客户端版本(3.1.0)高于元存储版本(2.3.0),需执行元存储升级操作。 2. **元存储损坏或配置错误**:元存储数据库中的版本信息与实际Hive版本不一致,可能因手动修改或异常操作导致[^1][^3]。 --- ### 方法1:升级元存储Schema(推荐) **步骤1:停止Hive服务** ```bash # 停止Hive Metastore和HiveServer2 systemctl stop hive-metastore systemctl stop hive-server2 ``` **步骤2:执行Schema升级命令** 使用Hive自带的`schematool`工具升级元存储: ```bash # 根据元存储类型选择驱动(MySQL/PostgreSQL等) schematool -dbType mysql -upgradeSchemaFrom 2.3.0 ``` - 若从2.3.0升级到3.1.0,命令会自动应用增量升级脚本[^4]。 **步骤3:验证升级结果** ```bash schematool -dbType mysql -info ``` - 输出应为`Hive distribution version: 3.1.0`和`Metastore schema version: 3.1.0`。 --- ### 方法2:绕过版本验证(临时方案) **步骤1:修改`hive-site.xml`** 添加配置关闭版本检查: ```xml <property> <name>hive.metastore.schema.verification</name> <value>false</value> </property> ``` - 此方法跳过版本校验,但可能导致功能异常,仅限测试环境使用[^5]。 --- ### 方法3:手动修复元存储版本(风险较高) **步骤1:连接元存储数据库** ```sql mysql -u root -p USE hive; SELECT * FROM VERSION; -- 查看当前版本 ``` **步骤2:更新版本号(谨慎操作)** ```sql UPDATE VERSION SET SCHEMA_VERSION=&#39;3.1.0&#39; WHERE VER_ID=1; ``` - 此操作需确保元存储实际已兼容目标版本,否则可能引发数据损坏。 --- ### 关键注意事项 1. **备份元存储数据库**:操作前通过`mysqldump`备份数据。 2. **版本兼容性**:Hive客户端、元存储和Spark的版本需一致,避免跨版本混用[^3]。 3. **升级顺序**:先升级元存储,再升级Hive客户端和Spark。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值