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