通過JDBC來連接Hive

       在大數據分析中,Hive作爲歷史數據挖掘分析工具,用到的很多,我們可以通過Hive的命令行來很方便地操作Hive中的數據,但是很多時候我們都需要將Hive的操作融入到編程環境中去,而Hive提供了JDBC接口,因而我們可以很方便地通過JDBC來操作Hive。下面就記錄一下通過JDBC來連接Hive的過程:

        第一步:啓動集羣中的Mysql服務(在安裝mysql的那個節點上)

                        service mysqld start

       第二步:啓動Hived的Thrift服務(在安裝Hive的那個節點上)

                       hive --service hiveserver2 &

       第三步:通過JDBC來連接HIve(代碼如下)

                       

                   

//連接JDBC的主代碼

package com.shuke.Hive;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class test {
public static void main(String[] args) throws SQLException {

Connection connection = null;
PreparedStatement pst = null;
ResultSet result = null;

//建立連接
connection = ConnectionHive.getConnection(ConnectionHive.url, "", "");

//執行SQL語句
String querysql = "select * from a66 where DEVIDSTR = ?";
try {
pst = connection.prepareStatement(querysql);
    pst.setString(1, "550001411993");
    Long stime = System.currentTimeMillis();
    result = pst.executeQuery();
    System.out.println("time---"+(System.currentTimeMillis()-stime)+"ms");
} catch (SQLException e) {
e.printStackTrace();
}

//處理查詢結果
    while (result.next()) {
System.out.println(result.getString("DEVIDSTR"));
}

//釋放資源
ConnectionHive.close(connection, pst, result);
}

}

封裝的JDBC的Connection方法

package com.shuke.Hive;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class ConnectionHive {

public static String url = "jdbc:hive2://192.168.8.119:10000/default";

//無參構造函數
private ConnectionHive(){

}

//將驅動註冊寫入靜態代碼塊中,這樣保證了驅動註冊在程序中只運行一次
static{
try {
Class.forName("org.apache.hive.jdbc.HiveDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

//數據庫連接的靜態方法
public static Connection getConnection(String url,String user,String password){
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
System.out.println("連接到Hive失敗!");
e.printStackTrace();
} finally{
return conn;
}
}

/* 釋放資源的靜態方法:
 * 每釋放一個資源都要try catch,在finally中寫釋放下一個資源的代碼
 * 這樣保證了在任何一個資源釋放出現異常時,其他資源還都能正常釋放,
 * 不至於因爲異常而造成程序退出,從而其他資源沒有成功釋放
 * */
public static void close(Connection conn,Statement stmt,ResultSet result){
try {
if (result != null) 
 result.close();
} catch (SQLException e) {
e.printStackTrace();
} finally{
try {
if (stmt!=null)
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
if(conn!=null)
  conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章