Hive元存储启动报错:java.lang.NoSuchFieldError: REPLDIR 求助
Hive Metastore启动报错:java.lang.NoSuchFieldError: REPLDIR(Oracle元存储)
问题描述
使用Oracle作为元存储的Hive环境,此前运行正常,执行hive --service metastore时触发以下错误:
ERROR metastore.RetryingHMSHandler: java.lang.NoSuchFieldError: REPLDIR at org.apache.hadoop.hive.metastore.repl.DumpDirCleanerTask.setConf(DumpDirCleanerTask.java:42) at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:588) 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) 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:323) at org.apache.hadoop.util.RunJar.main(RunJar.java:236)
相关hive-site.xml配置片段:
<property> <name>javax.jdo.option.ConnectionUserName</name> <value>username</value> <description>Username to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:oracle:thin:@//<db:port/schema></value> <description> JDBC connect string for a JDBC metastore. To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL. For example, jdbc:postgresql://myhost/db?ssl=true for postgres database. </description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>oracle.jdbc.OracleDriver</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>hdfs://localhost:9000/user/hive/warehouse</value> <description>location of default database for the warehouse</description> </property>
解决方案
1. 排查Jar包版本冲突
- 进入
$HIVE_HOME/lib目录,检查是否存在多个版本的hive-metastore-*.jar,保留当前Hive版本对应的jar,删除其余旧版本或重复jar。 - 确认Hive依赖的Hadoop jar版本与集群Hadoop版本一致,避免跨版本依赖导致的字段缺失问题(例如Hive 3.x需匹配Hadoop 3.x,Hive 2.x匹配Hadoop 2.x)。
2. 补充REPL相关配置(若启用元数据复制)
REPLDIR是Hive元数据复制(REPL)功能的核心字段,若环境启用了该功能,需在hive-site.xml中添加对应配置:
<property> <name>hive.repl.dir</name> <value>hdfs://localhost:9000/user/hive/repl</value> </property>
确保配置的HDFS路径已创建,且Hive进程拥有读写权限。
3. 校验元存储Schema版本
备份Oracle元存储数据库后,执行Schema升级命令(根据Hive版本调整):
schematool -dbType oracle -upgradeSchema
该操作会同步Hive版本与元存储Schema的兼容性,解决版本不匹配导致的字段缺失问题。
4. 确认环境变量正确性
检查HIVE_HOME、HADOOP_HOME环境变量,确保指向当前使用的版本,避免系统中多版本Hive/Hadoop导致的类加载错误。
内容的提问来源于stack exchange,提问作者CuriousCat
相关产品推荐
相关产品推荐

