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

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 也可以

你可能感兴趣的:(hive)