Hive與JDBC示例
在使用 JDBC 開發 Hive 程序時, 必須首先開啟 Hive 的遠程服務接口。在hive安裝目錄下的bin,使用下面命令進行開啟:
hive -service hiveserver & //Hive低版本提供的服務是:Hiveserver
hive --service hiveserver2 & //Hive0.11.0以上版本提供了的服務是:Hiveserver2
我這里使用的Hive1.0版本,故我們使用Hiveserver2服務,下面我使用 Java 代碼通過JDBC連接Hiveserver。
18.1 測試數據
本地目錄/home/hadoop/下的djt.txt文件內容(每行數據之間用tab鍵隔開)如下所示:
1 dajiangtai
2 hadoop
3 Hive
4 hbase
5 spark
18.2 程序代碼
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class HiveJdbcTest1 {
private static String driverName = "org.apache.Hive.jdbc.HiveDriver";//Hive驅動名稱
private static String url = "jdbc:Hive2://djt11:10000/default";//連接Hive2服務的連接地址,Hive0.11.0以上版本提供了一個全新的服務:HiveServer2
private static String user = "hadoop";//對HDFS有操作權限的用戶
private static String password = "";//在非安全模式下,指定一個用戶運行查詢,忽略密碼
private static String sql = "";
private static ResultSet res;
public static void main(String[] args) {
try {
Class.forName(driverName);//加載HiveServer2驅動程序
Connection conn = DriverManager.getConnection(url, user, password);//根據URL連接指定的數據庫
Statement stmt = conn.createStatement();
//創建的表名
String tableName = "testHiveDriverTable";
/** 第一步:表存在就先刪除 **/
sql = "drop table " + tableName;
stmt.execute(sql);
/** 第二步:表不存在就創建 **/
sql = "create table " + tableName + " (key int, value string) row format delimited fields terminated by '\t' STORED AS TEXTFILE";
stmt.execute(sql);
// 執行“show tables”操作
sql = "show tables '" + tableName + "'";
res = stmt.executeQuery(sql);
if (res.next()) {
System.out.println(res.getString(1));
}
// 執行“describe table”操作
sql = "describe " + tableName;
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(res.getString(1) + "\t" + res.getString(2));
}
// 執行“load data into table”操作
String filepath = "/home/hadoop/djt.txt";//Hive服務所在節點的本地文件路徑
sql = "load data local inpath '" + filepath + "' into table " + tableName;
stmt.execute(sql);
// 執行“select * query”操作
sql = "select * from " + tableName;
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(res.getInt(1) + "\t" + res.getString(2));
}
// 執行“regular Hive query”操作,此查詢會轉換為MapReduce程序來處理
sql = "select count(*) from " + tableName;
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(res.getString(1));
}
conn.close();
conn = null;
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
} catch (SQLException e) {
e.printStackTrace();
System.exit(1);
}
}
}
18.3 運行結果(右擊-->Run as-->Run on Hadoop)
執行“show tables”運行結果:
testHivedrivertable
執行“describe table”運行結果:
key int
value string
執行“select * query”運行結果:
1 dajiangtai
2 hadoop
3 Hive
4 hbase
5 spark
執行“regular Hive query”運行結果:
5


hive jdbc使用