Java 配置单元JDBC连接NoClassDefFoundError
我正在使用Hive2.1.1并尝试创建连接。以下是我正在尝试的代码: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
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需要)