【运维】hive 终端突然不能使用:Hive Schema version does not match metastore‘s schema version

文章描述了在执行Hive命令时遇到的SemanticException,原因是Hiveschema版本(3.1.0)与metastore的schema版本(1.2.0)不一致。常规排查包括检查元数据库的初始化和hive-site.xml的配置。最终解决方案是通过在hive-site.xml中添加配置禁用版本验证,从而解决命令执行失败的问题。

一. 问题描述

进入hive终端,执行如下命令报错:

hive> show tables;
FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException:
java.lang.RuntimeException: Unable to instantiate
org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient*

Error “Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient”
字面意思就是无法实例化hive Metastore client端。

 

二. 常规排查

先朝着hive的一些配置入手排查:

1. 元数据库

hive元数据库是否初始化,库是否正常存在,hive的元数据配置在mysql:
在这里插入图片描述

元数据库没有问题,且相关库表也都存在,说明进行了初始化,并且hive元数据没有丢失。

注意:

如果元数据不存在,或者库已经损坏,这可以删除库之后,重新进行初始化:
schematool -dbType mysql -initSchema

 

2. hive-site.xml相关meta连接信息检查

在这里插入图片描述

连接信息ok,到此说明我们在安装、配置hive时是没有问题的,接着分析日志。

 

三. 正解

查看hive运行日志:

MetaException(message:Hive Schema version 3.1.0 does not match metastore's schema version 1.2.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:8661)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:8656)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.startMetaStore(HiveMetaStore.java:8926)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.main(HiveMetaStore.java:8843)
        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:239)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:153)
Caused by: MetaException(message:Hive Schema version 3.1.0 does not match metastore's schema version 1.2.0 Metastore is not upgraded or corrupt)
        at org.apache.hadoop.hive.metastore.ObjectStore.checkSchema(ObjectStore.java:9063)
        at org.apache.hadoop.hive.metastore.ObjectStore.verifySchema(ObjectStore.java:9027)
        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.$Proxy25.verifySchema(Unknown Source)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMSForConf(HiveMetaStore.java:697)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMetaStore.java:690)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:767)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:538)
        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)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.invoke(RetryingHMSHandler.java:108)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:80)
        ... 11 more 

关键信息:

(message:Hive Schema version 3.1.0 does not match metastore’s schema version 1.2.0 Metastore is not upgraded or corrupt)

简单的说,hive schema和metastore的schema版本不一致,通过分析相关堆栈方法:checkSchema、verifySchema,基本可以了解,在执行hive shell命令之前,hive会校验hive schema和metastore的schema的版本,如果版本不一致则直接抛出异常导致命令不可使用。
 

而这个问题是在使用一段时间之后突然出现的,那我们暂时可以认为,hive schema和metastore的schema版本不一致,不会影响hive的正常使用,而这个问题可以:

add below properties in hive-site.xml.

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

即配置禁用版本验证来解决问题。

 

配置好之后,重新进入hive,执行命令,问题解决。

<think> 首先,用户的问题是:"我想查找解决 org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version 错误的方法"。用户提供了几个引用,这些引用描述了类似错误及其解决方法。 我需要总结引用中的信息,提供清晰的解决步骤。用户引用了多个来源,所以我应该综合这些信息。 关键引用: - [^1]: 错误是由于Hive的数据库MySQL没有初始化。解决方法:运行 `schematool -dbType mysql -initSchema`。但初始化时可能出错。 - [^2]: 初始化时遇到重复键错误(Duplicate entry),导致Schema初始化失败。 - [^3]: 错误是MySQL数据库存在(Unknown database 'hive')。需要创建数据库。 - [^4]: 类似错误,但用户未提供具体解决方法(只提到"解决方法:"但没写)。 - [^5]: 错误是由于配置文件中的JDBC连字符串配置错误。需要检查并修正配置文件。 来自这些引用,常见原因和解决方法包括: 1. **数据库未初始化或Schema问题**:运行 `schematool -dbType mysql -initSchema` 来初始化数据库。但如果数据库存在,需要先创建数据库。 2. **数据库存在**:在MySQL中创建名为'hive'的数据库(或其他配置的数据库名)。如引用[^3]所示。 3. **重复键错误**:在初始化时如果遇到主键冲突,可能需要清除现有数据或重新初始化。引用[^2]提到这个错误。 4. **JDBC连配置错误**:检查Hive配置文件(如 hive-site.xml),确保数据库连URL、用户名、密码正确。引用[^5]强调这一点,指出连字符串指向了错误的主机。 另外,用户提到:"上述引用仅供参考,并是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。" 但在这个对话中,没有"上一次的问题和回答",因为这是新对话的开始。所以,我应该基于提供的引用回答。 我的回答结构: - 由于系统指令要求使用中文回答,结构清晰,逐步解决问题。 - 回答应真实可靠,基于引用信息。 - 在末尾添加引用标识,如[^1], [^2]等。 - 生成相关问题。 步骤: 1. **确认错误原因**:解释错误 "Failed to get schema version" 通常是由于Hive Metastore无法连到MySQL数据库或数据库Schema问题。 2. **常见解决方法**:列出基于引用的步骤。 - 检查数据库是否存在:登录MySQL,创建数据库(如果存在)。 - 初始化Schema:运行 `schematool -dbType mysql -initSchema`。 - 处理初始化错误:如遇到重复键错误,可能需要删除现有Schema使用 `schematool -dbType mysql -upgradeSchema`。 - 检查配置文件:确保 hive-site.xml 中的JDBC连正确(URL, driver, user, password)。 3. **详细步骤**:提供逐步指导。 4. **生成相关问题**:在末尾添加相关问题。 回答结构: - 开头:简述错误和总体解决方法。 - 主体:分步骤解释如何解决。 - 结尾:添加相关问题。 确保使用正确的LaTeX格式:行内数学表达式用 $...$,独立公式用 $$...$$,但在这个主题中,可能需要数学表达式,所以专注于文本。 添加引用:在相关部分末尾添加引用标识。 例如:"...需要运行初始化命令[^1]." 现在,构建回答。 </think>### 解决 org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version 错误的方法 这个错误通常发生在启动 Apache Hive 时,Hive Metastore 无法连到 MySQL 数据库或数据库 Schema(架构)未正确初始化。错误消息 `Failed to get schema version` 表明 Metastore 无法验证数据库版本,可能由数据库存在、连配置错误或 Schema 初始化失败引起。以下是基于常见原因的逐步解决方法。请按顺序操作,并在每个步骤后验证 Hive 是否正常启动(如运行 `hive` 命令测试)。 #### 1. **检查数据库是否存在并创建(如果需要)** - 错误可能源于 MySQL 中 Hive 的数据库未创建(如引用[^3]所示)。登录 MySQL,检查数据库是否存在: ```bash mysql -u root -p # 输入密码进入 MySQL SHOW DATABASES; # 查看数据库列表 ``` - 如果缺少名为 `hive`(或配置的数据库名)的数据库,手动创建: ```sql CREATE DATABASE hive; -- 创建数据库 GRANT ALL PRIVILEGES ON hive.* TO 'your_username'@'localhost' IDENTIFIED BY 'your_password'; -- 授权用户,替换为实际值 FLUSH PRIVILEGES; -- 刷新权限 EXIT; -- 退出 MySQL ``` - 验证:再次运行 `SHOW DATABASES;` 确认 `hive` 存在[^3]。 - **注意**:如果数据库已存在但损坏,可考虑备份后删除并重建: ```sql DROP DATABASE hive; -- 删除现有数据库 CREATE DATABASE hive; -- 重新创建 ``` #### 2. **初始化或更新数据库 Schema** - 数据库创建后,必须初始化 Schema。运行 Hive 提供的工具: ```bash schematool -dbType mysql -initSchema # 初始化 Schema ``` - **常见问题与解决**: - **初始化失败(如重复键错误)**:如果输出包含类似 `Error: Duplicate entry ... for key 'PRIMARY'`(引用[^2]),表示 Schema 表已存在但数据冲突。尝试升级 Schema 或重新初始化: ```bash schematool -dbType mysql -upgradeSchema # 升级现有 Schema # 或强制重新初始化(先备份数据库) schematool -dbType mysql -initSchema --verbose # --verbose 查看详细错误 ``` - **数据库连问题**:确保 MySQL 服务正在运行(`systemctl status mysqld`),并检查防火墙设置[^1][^3]。 #### 3. **检查并修正 Hive 配置文件** - 错误常由 `hive-site.xml` 中的 JDBC 连配置错误引起(如引用[^5]所示)。编辑配置文件(路径通常为 `$HIVE_HOME/conf/hive-site.xml`): ```bash vi $HIVE_HOME/conf/hive-site.xml # 使用编辑器打开 ``` - 验证以下关键属性(替换为实际值): ```xml <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://your_mysql_host:3306/hive?createDatabaseIfNotExist=true</value> <!-- 确保主机、端口和数据库名正确 --> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <!-- 驱动类名 --> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>your_username</value> <!-- MySQL 用户名 --> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>your_password</value> <!-- MySQL 密码 --> </property> ``` - **修正后**:重启 Hive 服务: ```bash hive --service metastore & # 启动 Metastore hive # 测试 Hive CLI ``` #### 4. **其他常见原因和通用检查** - **MySQL 驱动缺失**:确保 MySQL JDBC 驱动 JAR 文件(如 `mysql-connector-java-5.1.48.jar`)已复制到 `$HIVE_HOME/lib` 目录。 - **权限问题**:确认运行 Hive 的用户对数据库有读写权限(在 MySQL 中授权)。 - **日志分析**:查看详细日志定位错误: ```bash tail -f /tmp/hive/hive.log # 默认日志路径 ``` - 如果日志显示连超时或拒绝,检查网络连通性(如 `telnet your_mysql_host 3306`)。 - **环境一致性**:确保所有节点(如 Hadoop 集群)使用相同配置,避免主机名或 IP 一致(引用[^5])。 #### 验证解决方法 - 成功初始化后,`schematool -dbType mysql -initSchema` 应输出 `schemaTool completed`。 - 运行 Hive 测试查询(如 `SHOW DATABASES;`),无错误即解决[^1][^4]。 如果上述步骤无效,提供详细错误日志可进一步诊断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值