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

相关文章
相关标签/搜索