hive(05)、使用JAVA對數據倉庫HIVE進行操做

        本文代碼碼雲地址:https://gitee.com/MaxBill/HSDPjava

        在前文中咱們實踐了基於hadoop的數據倉庫hive的安裝、配置、應用、擴展等,那麼咱們在實際中該如何經過程序調用(用戶接口)開發呢,hive提供了三種調用方式:首先是CLI就是咱們前面使用過的hive shell命令行、而後就是經過JDBC或者ODBC的調用(經過程序可實現調用),最後就是官方提供的WebUI的方式。本文咱們詳細說的是使用JDBC經過java代碼去訪問hive服務,進行一些基本的操做。mysql

1、環境準備

1.hadoop集羣git

2.hive元數據存儲服務(mysql服務)sql

3.hive數據倉庫服務shell

4.eclipse開發工具數據庫

2、開發準備

1.建立一個空的java項目apache

2.建立如上的包eclipse

util包中使咱們操做的jdbc或者odbc的工具類工具

main包中使咱們程序運行的主類所在oop

3.啓動hadoop集羣

在主節點上啓動hadoop集羣start-all.sh

4.啓動元數據庫服務

登錄元數據庫服務所在主機,啓動mysql服務service mysql start

5.啓動hiveserver2服務

在hive機器上啓動hiveserver服務:hive --service hiveserver2 或者hive --service hiveserver2 &  

6.啓動Hive Metastore服務

在hive機器上啓動Hive Metastore服務:hive --service metastore或者hive --service metastore &     

看到以下信息,說明啓動完成:

7.驗證啓動

在終端輸入jps -ml查看:

能夠看到hadoop集羣個hive服務啓動都正常

3、開始編碼

1.編寫jdbc工具類

編寫打開hive鏈接的方法

 

代碼塊:

private static String driver = "org.apache.hive.jdbc.HiveDriver";
	private static String url = "jdbc:hive2://hdpc01:10000/default";
	private static String user = "root";
	private static String pass = "123456";

	// 打開鏈接
	public static Connection openConnection() {
		Connection conn = null;
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, user, pass);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}

編寫關閉hive鏈接的方法

代碼塊:

// 關閉鏈接
	public static void closeConnection(Statement stmt, Connection conn) {
		try {
			if (stmt != null) {
				stmt.close();
				stmt = null;
			}
			if (conn != null) {
				conn.close();
				conn = null;
			}
			System.out.println(">>>>>>>>>>>>>>>>>>>>:關閉鏈接成功...");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

測試鏈接 

代碼塊:

package com.maxbill.hive.main;

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

import com.maxbill.hive.util.JdbcUtils;

/**
 * @user maxbill
 * @date 2018/01/16
 * @func hive操做測試類
 */
public class HiveTest {

	public static void main(String[] args) {
		// 1.測試鏈接
		testHiveConn();
	}

	public static void testHiveConn() {
		try {
			Connection conn = JdbcUtils.openConnection();
			Statement stmt = conn.createStatement();
			if (null != stmt) {
				System.out.println(">>>>>>>>>>>>>>>>>>>>:打開鏈接成功...");
				// 此處主要是測試鏈接是否正常,打開成功後,咱們調用關閉方法釋放鏈接
				JdbcUtils.closeConnection(stmt, conn);
			} else {
				System.out.println(">>>>>>>>>>>>>>>>>>>>:打開鏈接失敗...");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

執行測試鏈接的hive方法

發生異常,這是由於缺乏hive驅動包,咱們在項目中導入如下jar包即

          

而後繼續測試,鏈接成功

2.基本查詢操做

代碼塊:

public static void main(String[] args) {
		String sql = "select *  from tb_user";
		runQuerySql(sql);
	}

	// 查詢數據
	public static void runQuerySql(String sql) {
		try {
			Connection conn = JdbcUtils.openConnection();
			Statement stmt = conn.createStatement();
			if (null != stmt) {
				System.out.println(">>>>>>>>>>>>>>>>>>>>:打開鏈接成功...");
				ResultSet rs = stmt.executeQuery(sql);
				System.out.println(">>>>>>>>>>>>>>>>>>>>:執行運行結果...");
				// 輸出查詢的結果集
				List list = resultSetToList(rs);
				for (Object listObj : list) {
					System.err.println(listObj.toString());
				}
				// 調用關閉方法釋放鏈接
				JdbcUtils.closeConnection(stmt, conn);
			} else {
				System.out.println(">>>>>>>>>>>>>>>>>>>>:打開鏈接失敗...");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

        // ResultSet結果集轉成list
	public static List resultSetToList(ResultSet rs) throws java.sql.SQLException {
		if (rs == null)
			return Collections.EMPTY_LIST;
		ResultSetMetaData md = rs.getMetaData(); // 獲得結果集結構信息,好比字段數、字段名等
		int columnCount = md.getColumnCount(); // ResultSet的列數
		List list = new ArrayList();
		Map rowData = new HashMap();
		while (rs.next()) {
			rowData = new HashMap(columnCount);
			for (int i = 1; i <= columnCount; i++) {
				rowData.put(md.getColumnName(i), rs.getObject(i));
			}
			list.add(rowData);
		}
		return list;
	}

下面的查詢操做都是基於以上方法,只需傳入sql語句參數,使用DML的查詢方法

1>.基本查詢

sql="SELECT *  FROM tb_user WHERE id>0";

2>.查看錶結構

sql="desc tb_user";

3>.統計查詢

sql="SELECT COUNT(id) FROM tb_user ";

4>.表查詢

sql="show tables ";

如下的建立刪除表等操做沒有rs結果,使用DLL語句的處理方法

代碼塊:   

// 數據操做
	public static void runHandleSql(String sql) {
		try {
			Connection conn = JdbcUtils.openConnection();
			Statement stmt = conn.createStatement();
			if (null != stmt) {
				System.out.println(">>>>>>>>>>>>>>>>>>>>:打開鏈接成功...");
				stmt.execute(sql);
				// 調用關閉方法釋放鏈接
				JdbcUtils.closeConnection(stmt, conn);
			} else {
				System.out.println(">>>>>>>>>>>>>>>>>>>>:打開鏈接失敗...");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

5>.建立表

sql = "create table tb_test (key int, value string)  row format delimited fields terminated by '\t'"; 

而後執行show tables 能夠看到建立的tb_test表

6>.刪除表

sql="drop table if exists tb_test";

而後執行show tables 能夠看到建立的tb_test表已經刪除

4、總結

        以上就是本文使用java代碼經過jdbc的方式鏈接hive進行的簡單的一些DLL查詢和DML查詢操做,在實際開發中相比以前的hive shell方式,使用代碼去操做的方式用的更多點。本文的測試代碼已經上傳碼雲,代碼地址爲:https://gitee.com/MaxBill/HSDP

相關文章
相關標籤/搜索