Java 配置单元JDBC连接NoClassDefFoundError

Java 配置单元JDBC连接NoClassDefFoundError,java,hadoop,jdbc,hive,Java,Hadoop,Jdbc,Hive,我正在使用Hive2.1.1并尝试创建连接。以下是我正在尝试的代码: private static String driverName = "org.apache.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException, ClassNotFoundException { // Register driver and create driver instance Clas

我正在使用Hive2.1.1并尝试创建连接。以下是我正在尝试的代码:

private static String driverName = "org.apache.hive.jdbc.HiveDriver";

public static void main(String[] args) throws SQLException, ClassNotFoundException {
    // Register driver and create driver instance

    Class.forName(driverName);
    // get connection

    Connection con = DriverManager.getConnection("jdbc:hive2://", "", "");
    Statement stmt = con.createStatement();

    stmt.executeQuery("CREATE DATABASE userdb");
    System.out.println("Database userdb created successfully.");

    con.close();
}
以下是我在bashrc中声明的类路径:

CLASSPATH=$CLASSPATH:/usr/lib/hive/lib/hive-jdbc-2.1.1.jar CLASSPATH=$CLASSPATH:/usr/local/hadoop/lib/*:。 CLASSPATH=$CLASSPATH:/usr/local/apache-hive-2.1.1-bin/lib

我得到下面的错误

错误状态记录器未找到log4j2配置文件。使用默认值 配置:仅将错误记录到控制台。线程中的异常 “main”java.lang.NoClassDefFoundError: org/apache/hadoop/hive/ql/metadata/HiveException位于 org.apache.hive.service.cli.thrift.EmbeddedThriftBinaryCLIService。(EmbeddedThriftBinaryCLIService.java:33) 在 HiveConnection.(HiveConnection.java:163) 位于org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:107) java.sql.DriverManager.getConnection(DriverManager.java:664)位于 java.sql.DriverManager.getConnection(DriverManager.java:247)位于 com.raad.ams.bean.HiveJdbc.main(HiveJdbc.java:17)位于 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于 invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 位于java.lang.reflect.Method.invoke(Method.java:498) com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 原因:java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.metadata.HiveException位于 java.net.URLClassLoader.findClass(URLClassLoader.java:381)位于 loadClass(ClassLoader.java:424)位于 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)位于 loadClass(ClassLoader.java:357)


任何帮助都将不胜感激。

以下是我的建议:创建一个Maven/Gradle项目,并在pom中添加Hive jdbc。它将下载所有依赖项

否则,请检查以下内容:


您需要包括所有在dependencies标签下的JAR。

我遇到了一个类似的问题,我们在
Robot automation framework
Hive
上发现了
noclassdeffound
错误。这看起来是jar兼容性问题。我们通过将最新的
hivejdbc
maven依赖项添加到pom文件中解决了这个问题,它成功了。
您应该检查所有必需的与Hive相关的jar,并相应地更新它们。

使用“Hive-jdbc-standalone-2.1.1.jar”来摆脱依赖性问题……注意:即使使用所谓的“standalone”jar,您也需要在类路径中使用
hadoop common.jar
commons configuration.jar
,还有可能
hadoop auth.jar
(Kerberos需要)