java通過JDBC驅動連線操作hive例項
Hive提供了jdbc驅動,使得我們可以用java程式碼來連線Hive並進行一些類關係型資料庫的sql語句查詢等操作。首先,我們必須將Hive的服務,也就是HiveServe開啟。在Hive 0.11.0版本前,只有HiveServer服務可用,但是HiveServer本身存在很多問題(比如:安全性、併發性等);針對這些問題,Hive-0.11.0版本後提供了一個全新的服務:HiveServer2,這個很好的解決HiveServer存在的安全性、併發性等問題。
兩種服務的啟動方式基本一樣。如下:
[plain] view plain copy print?- ./bin/hive --service hiveserver
- ./bin/hive --service hiveserver2
./bin/hive --service hiveserver
./bin/hive --service hiveserver2
啟動hiveserver(2)服務後,你就可以通過java程式碼來連線hiveserver並進行相應的hive操作了。示例程式碼如下:
[java] view plain copy print?- package com.aturbo.hadoop;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.Statement;
- public class Hive {
- public static void main(String args[])throws Exception{
- Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
- //String dropSQL = "drop table javabloger";
- //String createSQL = "create table javabloger(key int,value string)";
- //String insertSQL = "load data local inpath '/home/congcong.ai/hive/kv1.txt'"
- // + "overwrite into table javabloger";
- // String querySQL = "select a.* from javabloger a";
- String querySQL = "select * from pokes";
- Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", "");
- Statement stmt = con.createStatement();
- //stmt.executeQuery(dropSQL);
- //stmt.executeQuery(createSQL);
- //stmt.executeQuery(insertSQL);
- ResultSet res = stmt.executeQuery(querySQL);
- while(res.next()){
- System.out.println("Result: key:"+res.getString(1) +" –> value:" +res.getString(2));
- }
- }
- }
package com.aturbo.hadoop;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Hive {
public static void main(String args[])throws Exception{
Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
//String dropSQL = "drop table javabloger";
//String createSQL = "create table javabloger(key int,value string)";
//String insertSQL = "load data local inpath '/home/congcong.ai/hive/kv1.txt'"
// + "overwrite into table javabloger";
// String querySQL = "select a.* from javabloger a";
String querySQL = "select * from pokes";
Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", "");
Statement stmt = con.createStatement();
//stmt.executeQuery(dropSQL);
//stmt.executeQuery(createSQL);
//stmt.executeQuery(insertSQL);
ResultSet res = stmt.executeQuery(querySQL);
while(res.next()){
System.out.println("Result: key:"+res.getString(1) +" –> value:" +res.getString(2));
}
}
}
上面程式碼是針對hiveserver的。如果是hiveserver2。那有兩處需要修改,具體修改如下:
org.apache.hadoop.hive.jdbc.HiveDriver
改為:
org.apache.hive.jdbc.HiveDriver
jdbc:hive://localhost:10000/default
改為:
jdbc:hive2://localhost:10000/default
其中’localhost’是主機地址,10000是埠後,default是預設的db。
接下來就可以編譯、執行上面的程式碼了。
本人使用的開發環境是linux(centos 7)。沒有安裝eclipse。所以這裡只講用指令碼的方式執行。
1) 首先建立一個資料夾/hive。(本人建立的該資料夾絕對路徑:/home/workspace/hive)
2) 在hive下面分別建立三資料夾:src/、classes/、lib/。其中,src儲存原始碼(也就是上面的程式碼,命名為Hive.java),classes儲存編譯後的.class檔案。lib存放依賴的jar包。
3) 在lib下存放依賴jar包:
4) 編譯Hive.java,並保持到/classes目錄下:
javac -d ./classes/ ./src/*.java5) 將/classes/打包成jar,並放在當前路徑下(/home/workspace/hive):
[plain] view plain copy print?- [[email protected] hive]# jar cvf hive.jar -C ./classes/ .
- 已新增清單
- 正在新增: com/(輸入 = 0) (輸出 = 0)(儲存了 0%)
- 正在新增: com/aturbo/(輸入 = 0) (輸出 = 0)(儲存了 0%)
- 正在新增: com/aturbo/hadoop/(輸入 = 0) (輸出 = 0)(儲存了 0%)
- 正在新增: com/aturbo/hadoop/Hive.class(輸入 = 1596) (輸出 = 926)(壓縮了 41%)
[[email protected] hive]# jar cvf hive.jar -C ./classes/ .
已新增清單
正在新增: com/(輸入 = 0) (輸出 = 0)(儲存了 0%)
正在新增: com/aturbo/(輸入 = 0) (輸出 = 0)(儲存了 0%)
正在新增: com/aturbo/hadoop/(輸入 = 0) (輸出 = 0)(儲存了 0%)
正在新增: com/aturbo/hadoop/Hive.class(輸入 = 1596) (輸出 = 926)(壓縮了 41%)
6)建立指令碼——run.sh,內容如下:
[plain] view plain copy print?- #!/bin/bash
- HADOOP_HOME=/home/aturbo/hadoop/hadoop-1.2.1
- HIVE_HOME=/home/aturbo/hive/hive.1.2.1
- CLASSPATH=$CLASSPATH:
- for i in /home/workspace/hive/lib/*.jar;do
- CLASSPATH=$CLASSPATH:$i
- done
- echo $CLASSPATH
- java -cp $CLASSPATH:/home/workspace/hive/hive.jar com.aturbo.hadoop.Hive
#!/bin/bash
HADOOP_HOME=/home/aturbo/hadoop/hadoop-1.2.1
HIVE_HOME=/home/aturbo/hive/hive.1.2.1
CLASSPATH=$CLASSPATH:
for i in /home/workspace/hive/lib/*.jar;do
CLASSPATH=$CLASSPATH:$i
done
echo $CLASSPATH
java -cp $CLASSPATH:/home/workspace/hive/hive.jar com.aturbo.hadoop.Hive
7)給run.sh賦予可執行許可權,或直接sourcerun.sh,開始連線hive,並執行程式碼。如果執行成功,服務端後輸出:OK。客戶端輸出:
[plain] view plain copy print?- 15/10/16 15:04:23 INFO jdbc.Utils: Supplied authorities: localhost:10000
- 15/10/16 15:04:23 INFO jdbc.Utils: Resolved authority: localhost:10000
- 15/10/16 15:04:23 INFO jdbc.HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://localhost:10000/default
- Result: key:1 –> value:wyp
- Result: key:2 –> value:test
- Result: key:3 –> value:zs
- Result: key:1 –> value:wyp
- Result: key:2 –> value:test
- Result: key:3 –> value:zs
- Result: key:1 –> value:wyp
- Result: key:2 –> value:test
- Result: key:3 –> value:zs
- Result: key:1 –> value:wyp
- Result: key:2 –> value:test
- Result: key:3 –> value:zs
15/10/16 15:04:23 INFO jdbc.Utils: Supplied authorities: localhost:10000
15/10/16 15:04:23 INFO jdbc.Utils: Resolved authority: localhost:10000
15/10/16 15:04:23 INFO jdbc.HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://localhost:10000/default
Result: key:1 –> value:wyp
Result: key:2 –> value:test
Result: key:3 –> value:zs
Result: key:1 –> value:wyp
Result: key:2 –> value:test
Result: key:3 –> value:zs
Result: key:1 –> value:wyp
Result: key:2 –> value:test
Result: key:3 –> value:zs
Result: key:1 –> value:wyp
Result: key:2 –> value:test
Result: key:3 –> value:zs
至此,整個通過JDBC驅動連線hive並操作的例項就完成了。
注意:
Hive是基於Hadoop的,所以,在連線hive時,務必已經啟動了hadoop。具體hadoop的安裝啟動等,推薦下載閱讀
此外,如果出現連線
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure。
說明,hive元資料關聯的mysql資料庫沒有啟動。
相關推薦
java通過JDBC驅動連線操作hive例項
Hive提供了jdbc驅動,使得我們可以用java程式碼來連線Hive並進行一些類關係型資料庫的sql語句查詢等操作。首先,我們必須將Hive的服務,也就是HiveServe開啟。在Hive 0.11.0版本前,只有HiveServer服務可用,但是HiveServer本身存在很多問題(比如:安全性、併發性
java 通過jdbc驅動連線hive操作例項
String insterSQL="LOAD DATA LOCAL INPATH '/work/hive/examples/files/kv1.txt' OVERWRITE INTO TABLE javabloger"; String queryS
java 通過jdbc驅動連線hive操作
String insterSQL="LOAD DATA LOCAL INPATH '/work/hive/examples/files/kv1.txt' OVERWRITE INTO TABLE javabloger"; String query
Hive使用者介面(二)—使用Hive JDBC驅動連線Hive操作例項
問題導讀: 1、Hive提供了哪三種使用者訪問方式? 2、使用HiveServer時候,需要首先啟動哪個服務? 3、HiveServer的啟動命令是? 4、HiveServer是通過哪個服務來提供遠端JDBC訪
Java 通過JDBC連線並操作Mysql資料庫
使用Java連線資料庫需要使用JDBC驅動。JDBC(Java Data Base Connectivity,java資料庫連線)是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。以下是使用方
java通過JDBC連線資料庫及增刪改查操作
1.實戰資料庫資料的準備 建立資料庫(newsmanager),然後建立表news(id,title,content,type)和newstype(id,name),其中news的type和newstype的id為主外來鍵關係,如下圖圖 2.JDBC的介紹
Java 通過JDBC連線Mysql資料庫的方法和例項
之前有兩篇文章講了安裝mysql(ubuntu和windows)和視覺化工具workbench的使用,這篇文章就講一下java程式是如何連線MySQL資料庫的。 Java是通過JDBC連線Mysql資料庫的。JDBC(Java Data Base Connectivi
java通過jdbc連線impala和pom.xml以及增查操作
pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=
如何解決Java通過JDBC訪問MySQL時SSL連線告警問題
背景 MySQL 5.5.45+, 5.6.26+, 5.7.6+開始支援SSL連線,如果沒有明確設定相關的選項時,預設要求SSL連線。為相容性考慮,舊應用程式需要設定verifyServerCert
JAVA通過JDBC操作MySQL資料庫(三):PreparedStatement介面操作資料庫
JAVA通過JDBC操作MySQL資料庫(三):PreparedStatement介面操作資料庫 Statement介面的問題 PreparedStatement介面操作資料庫 Statement介面的問題 在文章JAVA通過JDBC操作
Java通過JDBC 進行MySQL資料庫操作
一:前言 在測試工作中難免會和資料庫打交道,可能大家對資料庫語句都比較熟,比如常見的增刪改查等,但是當我們在做自動化測試時,比如介面測試,大部分請求引數,可能都是從資料庫中取值,並且介面返回值最後都會記錄在資料庫中,這樣前提就需要和資料庫建立連線,才能進行讀寫
jsp通過jdbc驅動與mysql連線
資料庫的連線終於成功了。主要運用mysql-gui-tools-5.0-r17-win32這個工具,其實主要就是一個mysql-connector-java-5.0.4-bin.jar而已,這個可以單獨下載。 把mysql-connector-java-5.0.4-b
2.MySQL8.0版本jdbc驅動連線資料庫操作
1.JDBC操作資料庫的步驟: 1.註冊驅動 告知JVM使用的是哪一個資料庫的驅動; 2.獲得連結 使用JDBC中的類,完成對MySql資料庫的連結; 3.獲得語句執行平臺 通過連結物件獲取對SQL語句的執行者物件;
Java通過JDBC連線資料庫的三種方式!!!並對資料庫實現增刪改查
前言 java連線資料庫完整流程為: 1,獲得驅動(driver),資料庫連線(url),使用者名稱(username),密碼(password)基本資訊的三種方式。 2,通過獲得的資訊完成JDBC實現連線資料庫。 注:連線前請匯入jar包,例:連線my
Java學習篇之--用純Java的JDBC驅動程式實現與資料庫連線
用純Java的JDBC驅動程式實現與資料庫連線 最近在研究JAVA中資料庫的連線,將知識整理一下分享給大家: Java程式可以用純Java的JDBC驅動程式實現與資料庫連線。這種方法應用較廣泛,但是需要下載相應的驅動程式包,因為不同的資
hive的訪問:通過JDBC遠端連線hive資料倉庫
hive的訪問:終端訪問 遠端訪問 終端訪問:安裝hive,利用shell指令碼訪問 不可併發訪問 遠端訪問:通過JDBC連線資料倉庫 支援併發訪問 啟動hiveserver2服務:檢視該命令可知hiveserver2,等價於hive --service hive
Java通過JDBC連線Mysql
1. 官網下載 2. 解壓 3. 匯入驅動 1、右鍵工程,build path 2、Libraries–>Add External JARs–>選擇mysql安裝目錄下的jar包 3、此時在我們的工程下就有了
Java動態生成SQL語句通過JDBC達成資料庫操作
在java中使用jdbc進行資料庫操作的時候 我們或許需要從多個表中進行查詢和插入操作 特別是如果多個表還有相互的依賴關係的話,插入操作就顯得非常難受 因為或許每一個動作,都需要重寫一個完全不同的sql語句 這樣的話程式碼量確實十分的大 而且程式碼會顯
解決JAVA通過JDBC連線Oracle資料庫出現的問題
Java連線Oracle步驟: 1.註冊載入驅動 驅動名:DRIVER="oracle.jdbc.driver.OracleDriver"; Class.forName("驅動類名"); 2.獲得連線 資料庫地址: URL="jdbc:oracle:thin:@1
IDEA , 用JDBC驅動連線SQL Server伺服器異常詳解
本文適用於IDEA,sqlserver伺服器的使用者。 今天研究JDBC連線伺服器,一直琢磨了一晚上,才解決這個問題。 這類問題網上也有很多類似的部落格,但是不一定有用(本人親測),畢竟程式版本不同可能適用性就不同。 剛開始每次執行程式碼都是這樣的問題: 這是在資料庫連線成