Hive具有一个可选的组件叫做HiveServer或者HiveThrift,其允许通过指定端口访问Hive.访问Hive常用访问方式是通过CLI进行访问。不过,CLI设计使其不方便通过编程的方式访问。CLI是胖客户端。Hive提供了jdbc驱动,使得我们可以用Java代码来连接Hive并进行一些类关系型数据库的sql语句查询等操作。同关系型数据库一样,我们也需要将Hive的服务打开;在Hive 0.11.0版本之前,只有HiveServer服务可用,这里我们使用hive-1.1.0,你得在程序操作Hive之前,必须在Hive安装的服务器上打开HiveServer2服务,如下:
进入到hive安装目录的bin目录下:启动 hiveserver2
需要注意的是:hiveserver 的driver classname是org.apache.hadoop.hive.jdbc.HiveDriver,HiveServer 2的是org.apache.hive.jdbc.HiveDriver,这两个容易混淆。
package com.hive.client;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JavaHiveClient {
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
private static String url = "jdbc:hive2://192.168.150.162:10000/default";
private static String sql = "";
private static ResultSet rs;
/**
* @param args
* @throws SQLException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws SQLException, ClassNotFoundException {
// TODO Auto-generated method stub
Connection conn = null;
Class.forName(driverName);
//默认使用端口10000, 使用默认数据库,用户名密码默认 hadoop 服务器登录用户名 dh!123456登录密码
conn = DriverManager.getConnection(url, "hadoop", "dh!123456");
String tableName = "vehicle_pass";
Statement stmt = conn.createStatement();
sql = "select * from " + tableName+" limit 8";
System.out.println("Running:" + sql);
rs = stmt.executeQuery(sql);
System.out.println("执行“select * query”运行结果:");
while (rs.next()) {
System.out.println(rs.getString(1) + "\t" +":" + rs.getString(2));
}
stmt.close();
conn.close();
}
}
运行结果:
0002301_20150417103232 :fpt://vehiclepass/20150417/2015041710323223.pic
0002301_20150417103232 :fpt://vehiclepass/20150417/2015041710323222143.pic
0002301_20150417103232 :fpt://vehiclepass/20150417/20150417103232221.pic
https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients