Hive元数据初始化报错:Unknown version specified for initialization:3.1.0求助
Hive Schematool初始化Derby元数据库故障排查
问题现象
执行初始化命令时先后出现两类错误:
- 无
--verbose参数时,Derby数据库启动失败 - 添加
--verbose参数后,报错指定的初始化版本未知
无verbose参数的错误输出
$ schematool -dbType derby -initSchema SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/apache/apache-hive-3.1.3-bin/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/C:/hadoop-3.3.4/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Metastore connection URL: jdbc:derby:;databaseName=metastore_db;create=true Metastore Connection Driver : org.apache.derby.jdbc.EmbeddedDriver Metastore connection User: APP org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version. Underlying cause: java.sql.SQLException : Failed to start database 'metastore_db' with class loader sun.misc.Launcher$AppClassLoader@6a5fc7f7, see the next exception for details. SQL Error code: 40000 Use --verbose for detailed stacktrace. *** schemaTool failed ***
添加verbose参数后的错误输出
$ schematool -dbType derby -initSchema --verbose SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/apache/apache-hive-3.1.3-bin/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/C:/hadoop-3.3.4/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Metastore connection URL: jdbc:derby://localhost:1527/metastore_db;create=true Metastore Connection Driver : org.apache.derby.jdbc.ClientDriver Metastore connection User: APP Starting metastore schema initialization to 3.1.0 org.apache.hadoop.hive.metastore.HiveMetaException: Unknown version specified for initialization: 3.1.0 org.apache.hadoop.hive.metastore.HiveMetaException: Unknown version specified for initialization: 3.1.0 at org.apache.hadoop.hive.metastore.MetaStoreSchemaInfo.generateInitFileName(MetaStoreSchemaInfo.java:137) at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:585) at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:567) at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:1517) 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:323) at org.apache.hadoop.util.RunJar.main(RunJar.java:236) *** schemaTool failed ***
故障原因及解决办法
1. Derby数据库启动失败(无verbose时的错误)
核心原因:
- 旧Derby进程未关闭,导致
metastore_db目录被占用 - 已存在的
metastore_db目录损坏或权限异常 - SLF4J多绑定冲突(虽非核心问题,但会干扰日志输出)
解决步骤:
- 关闭所有关联的Java进程:打开任务管理器,终止Hive、Derby相关的
java.exe进程 - 删除当前目录下的
metastore_db文件夹,清理旧数据库文件 - 解决SLF4J冲突:删除Hadoop目录下的
slf4j-reload4j-1.7.36.jar,保留Hive的log4j-slf4j-impl-2.17.1.jar
2. 初始化版本未知(加verbose后的错误)
核心原因:
- Hive 3.1.3默认尝试初始化到3.1.0版本,但该版本的初始化脚本与当前Hive版本不匹配
- 添加
--verbose后自动切换为Derby客户端模式,但未启动Derby网络服务 hive-site.xml中配置的元数据版本与Hive实际版本不一致
解决步骤:
- 显式指定匹配的Hive版本执行初始化:
schematool -dbType derby -initSchema -schemaVersion 3.1.3 - 保持嵌入式Derby模式:检查
hive-site.xml,确保javax.jdo.option.ConnectionURL配置为jdbc:derby:;databaseName=metastore_db;create=true,无需启动Derby服务 - 若需客户端模式:先到Derbin的bin目录执行
startNetworkServer启动网络服务,再运行schematool命令
验证
重新执行schematool -dbType derby -initSchema,输出schemaTool completed即为成功。
内容的提问来源于stack exchange,提问作者Alix Blaine
相关产品推荐
相关产品推荐

