1. 程式人生 > >java通過JDBC驅動連線操作hive例項

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?
  1. ./bin/hive --service hiveserver  
  2. ./bin/hive --service hiveserver2  
./bin/hive --service hiveserver

./bin/hive --service hiveserver2

啟動hiveserver(2)服務後,你就可以通過java程式碼來連線hiveserver並進行相應的hive操作了。示例程式碼如下:

[java] view plain copy print?
  1. package com.aturbo.hadoop;  
  2. import java.sql.Connection;  
  3. import java.sql.DriverManager;  
  4. import java.sql.ResultSet;  
  5. import java.sql.Statement;  
  6. public class Hive {  
  7.     public static void main(String args[])throws Exception{  
  8.         Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");  
  9.         //String dropSQL = "drop table javabloger";  
  10.         //String createSQL = "create table javabloger(key int,value string)";
      
  11.         //String insertSQL = "load data local inpath '/home/congcong.ai/hive/kv1.txt'"  
  12.         //      + "overwrite into table javabloger";  
  13.          // String querySQL = "select a.* from javabloger a";  
  14.           String querySQL = "select * from pokes";  
  15.           Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default""""");  
  16.           Statement stmt = con.createStatement();  
  17.           //stmt.executeQuery(dropSQL);  
  18.           //stmt.executeQuery(createSQL);  
  19.           //stmt.executeQuery(insertSQL);  
  20.           ResultSet res = stmt.executeQuery(querySQL);  
  21.           while(res.next()){  
  22.               System.out.println("Result: key:"+res.getString(1) +"  –>  value:" +res.getString(2));  
  23.           }  
  24.     }  
  25. }  
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/*.java

5)    將/classes/打包成jar,並放在當前路徑下(/home/workspace/hive):

[plain] view plain copy print?
  1. [[email protected] hive]# jar cvf hive.jar -C ./classes/ .  
  2. 已新增清單  
  3. 正在新增: com/(輸入 = 0) (輸出 = 0)(儲存了 0%)  
  4. 正在新增: com/aturbo/(輸入 = 0) (輸出 = 0)(儲存了 0%)  
  5. 正在新增: com/aturbo/hadoop/(輸入 = 0) (輸出 = 0)(儲存了 0%)  
  6. 正在新增: 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?
  1.    #!/bin/bash  
  2. HADOOP_HOME=/home/aturbo/hadoop/hadoop-1.2.1  
  3. HIVE_HOME=/home/aturbo/hive/hive.1.2.1  
  4. CLASSPATH=$CLASSPATH:  
  5. for i in /home/workspace/hive/lib/*.jar;do  
  6.      CLASSPATH=$CLASSPATH:$i  
  7. done  
  8. echo $CLASSPATH  
  9. 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?
  1. 15/10/16 15:04:23 INFO jdbc.Utils: Supplied authorities: localhost:10000  
  2. 15/10/16 15:04:23 INFO jdbc.Utils: Resolved authority: localhost:10000  
  3. 15/10/16 15:04:23 INFO jdbc.HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://localhost:10000/default  
  4. Result: key:1  –>  value:wyp  
  5. Result: key:2  –>  value:test  
  6. Result: key:3  –>  value:zs  
  7. Result: key:1  –>  value:wyp  
  8. Result: key:2  –>  value:test  
  9. Result: key:3  –>  value:zs  
  10. Result: key:1  –>  value:wyp  
  11. Result: key:2  –>  value:test  
  12. Result: key:3  –>  value:zs  
  13. Result: key:1  –>  value:wyp  
  14. Result: key:2  –>  value:test  
  15. 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學習篇之--用純JavaJDBC驅動程式實現與資料庫連線

用純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連線伺服器,一直琢磨了一晚上,才解決這個問題。 這類問題網上也有很多類似的部落格,但是不一定有用(本人親測),畢竟程式版本不同可能適用性就不同。 剛開始每次執行程式碼都是這樣的問題: 這是在資料庫連線成