使用Hive Metastore Client API连接Hive时遇类未找到异常
解决Hive Metastore Client连接时的ClassNotFoundException问题
问题场景
尝试通过Java使用Hive Metastore Client API连接Hive,运行代码后抛出org.apache.hadoop.shaded.com.ctc.wstx.io.InputBootstrapper类未找到异常。
复现代码
public static void main(String[] args) throws TException { SpringApplication.run(HiveConnectionThriftApplication.class, args); // Create a Hive configuration object HiveConf conf = new HiveConf(); // Set the metastore URIs using the recommended approach MetastoreConf.setVar(conf, MetastoreConf.ConfVars.THRIFT_URIS, "thrift://192.168.21.133:9083"); // Create a HiveMetaStoreClient instance HiveMetaStoreClient client = new HiveMetaStoreClient(conf); // Perform operations (example: get all databases) List<String> databases = client.getAllDatabases(); for (String database : databases) { System.out.println(database); } // Close the client client.close(); }
抛出异常
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/shaded/com/ctc/wstx/io/InputBootstrapper at com.HiveConnectionThriftApplication.main(HiveConnectionThriftApplication.java:19) Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.shaded.com.ctc.wstx.io.InputBootstrapper at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ... 1 more
解决方案
- 补全Hadoop相关依赖:
org.apache.hadoop.shaded.com.ctc.wstx.io.InputBootstrapper属于Hadoop shaded包中的woodstox组件,需确保项目引入对应版本的hadoop-common或hadoop-client依赖,版本要与Hive Metastore的版本匹配。 - 排查依赖冲突:通过Maven的
dependency:tree命令分析依赖树,找出重复或版本不兼容的Hadoop、woodstox相关依赖,排除冲突项。 - 对齐版本兼容性:保证使用的Hive Metastore Client版本与目标Hive Metastore服务版本一致,版本不匹配易引发类缺失问题。
- 直接添加woodstox依赖:若现有依赖未包含该类,可引入
com.fasterxml.woodstox:woodstox-core依赖,版本需与Hadoop所使用的woodstox版本一致。
内容的提问来源于stack exchange,提问作者Aditya kandalkar
相关产品推荐
相关产品推荐

