Java采用JDBC的方式連接Hive(SparkSQL)


前兩天,由於系統的架構設計的原因,想通過Java直接訪問Hive數據庫,對於我這個Java以及Hadoop平台的菜鳥來說,的確是困難重重,不過,還好是搞定了。感覺也不是很麻煩。這篇文章,作為一個感想記錄下來。( 作者:yangyang8848)

一、Hive的訪問方式

一般情況下,Hive是不能直接Java連接並訪問的,后來出現來一個SparkSQL的東東,變得可以通過JDBC的方式訪問連接。首先,我先介紹一些從Linux下訪問的方法:

1、遠程登錄到Linux平台:

2、進入到hive數據庫中,我們執行一條查詢語句:

通過上圖可以看到,系統執行了Map/Reduce操作,並最后顯示相關的結果。

這里有一個干貨哦:Hive查詢語句不支持類似於Mysql中的分頁查詢的,因此,這里采用了另外一種辦法進行分頁,自己看圖片學習啦~!

3、下邊我們采用Beeline遠程連接SqarkSQL然后訪問Hive數據。

 

通過上邊頁面可以看到,系統可以正確將數據查詢出來。

二、使用Java代碼進行連接訪問。

如果想要通過Java進行訪問,首先要在引用一下三個Jar包:

 <dependency>  
        <groupId>org.apache.hive</groupId>  
        <artifactId>hive-jdbc</artifactId>  
        <version>1.2.1</version>  
</dependency>  
   
<dependency>  
        <groupId>org.apache.hadoop</groupId>  
        <artifactId>hadoop-common</artifactId>  
       <version>2.4.1</version>  
</dependency>  
  
<dependency>  
       <groupId>jdk.tools</groupId>  
       <artifactId>jdk.tools</artifactId>  
       <version>1.6</version>  
       <scope>system</scope>  
       <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>  
   </dependency>  

 需要注意的是,包的版本一定要確認好,切勿版本過高

如果發生以下錯誤:

 org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset!   Struct:TOpenSessionReq(client_protocol:null)

則極可能的原因是你項目的hive-jdbc版本和服務器不一致的原因造成的,替換成和服務器一致的版本就可以了,

以下訪問代碼都已經經過了測試,拿走直接用,哈哈:

	public static int hiveJDBC_RowCount(String sql,Map<Integer,String> params){
		try {
			ResourceBundle rb = ResourceBundle.getBundle("config");
		    Class.forName(rb.getString("hivedriverClassName")).newInstance();

			Connection conn = DriverManager.getConnection(rb.getString("hiveurl"),rb.getString("hiveusername"),rb.getString("hivepassword"));
			java.sql.PreparedStatement pstsm = conn.prepareStatement(sql);
			for(Integer key : params.keySet()){
				pstsm.setString(key, params.get(key));
			}
			ResultSet resultSet = pstsm.executeQuery();
			int rowNum = 0;
			if(resultSet.next()){
				rowNum = resultSet.getInt(1);
			}
			return rowNum; 
		} catch (Exception e) {
			System.out.println(e);
			return 0;
		}
	}

 

hivedriverClassName=org.apache.hive.jdbc.HiveDriver
hiveurl=jdbc:hive2://192.168.31.243:10000/default
hiveusername=root
hivepassword=

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM