JDBC 连接 hive2 遇到的java.lang.ClassNotFoundException: org.apache.hive.jdbc.HiveDriver

来源:互联网 发布:c语言基础知识大全 编辑:程序博客网 时间:2024/04/30 12:09

JDBC 连接hive2, 程序挺简单, 跟其他数据库查询类似, 连接/执行查询/得到结果

package hive.server2.query;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class ApiQueryTest {private static String driverName = "org.apache.hive.jdbc.HiveDriver";public static void main(String[] args){try {Class.forName(driverName);Connection con = null;con = DriverManager.getConnection("jdbc:hive2://10.68.128.215:10000", "root", "WoLeGeQu");Statement stmt = con.createStatement();ResultSet res = null;String sql = "select * from api_logs";System.out.println("Running: " + sql);res = stmt.executeQuery(sql);System.out.println("ok");while (res.next()) {System.out.println(res.getString(1) + "\t" + res.getString(2) + "\t" +  res.getString(3) + "\t" +  res.getString(4));}} catch (Exception e) {e.printStackTrace();System.out.println("error");}}}

本地 MyEclipse10, Ctrl+F11 运行正常, 但打包到虚拟机下就不行了, 报错:
[root@localhost test]# java -jar HiveQueryTest.jar java.lang.ClassNotFoundException: org.apache.hive.jdbc.HiveDriver        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)        at java.security.AccessController.doPrivileged(Native Method)        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)        at java.lang.Class.forName0(Native Method)        at java.lang.Class.forName(Class.java:191)        at hive.server2.query.ApiQueryTest.main(ApiQueryTest.java:24)error

说找不到org.apache.hive.jdbc.HiveDriver,  想写个shell, 把 $HIVE_LIB目录下jar 都加到CLASSPATH应该行了吧, 结果还是报这个, 都没道理了...

解决办法 1

改成了MANIFEST.MF 加Class-Path, 把需要的jar包的写在这里, 结果OK, 需要注意的是, Class-Path: 冒号后面需要一个空格, 否则会报错:

Error: Invalid or corrupt jarfile HiveQueryTest.jar

Class-Path 后面加上两个jar 包基本就可以:

Class-Path: /home/hive/apache-hive-2.1.0-bin/test/lib/hive-jdbc-2.1.0-standalone.jar /home/hive/apache-hive-2.1.0-bin/test/lib/hadoop-common-2.7.0.jar

再次上传, 运行OK

解决办法 2

 讲程序与依赖的包一起打包 , 在Export 对话框中选择: Runnable JAR file 也可以

1 0