博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hive(05)、使用JAVA对数据仓库HIVE进行操作
阅读量:7107 次
发布时间:2019-06-28

本文共 4736 字,大约阅读时间需要 15 分钟。

hot3.png

        本文代码码云地址:https://gitee.com/MaxBill/HSDP

        在前文中我们实践了基于hadoop的数据仓库hive的安装、配置、应用、扩展等,那么我们在实际中该如何通过程序调用(用户接口)开发呢,hive提供了三种调用方式:首先是CLI就是我们前面使用过的hive shell命令行、然后就是通过JDBC或者ODBC的调用(通过程序可实现调用),最后就是官方提供的WebUI的方式。本文我们详细说的是使用JDBC通过java代码去访问hive服务,进行一些基本的操作。

一、环境准备

1.hadoop集群

2.hive元数据存储服务(mysql服务)

3.hive数据仓库服务

4.eclipse开发工具

二、开发准备

1.创建一个空的java项目

101658_b3Yi_2846946.png

2.创建如上的包

util包中使我们操作的jdbc或者odbc的工具类

main包中使我们程序运行的主类所在

3.启动hadoop集群

在主节点上启动hadoop集群start-all.sh

103616_9Chc_2846946.png

4.启动元数据库服务

登陆元数据库服务所在主机,启动mysql服务service mysql start

5.启动hiveserver2服务

在hive机器上启动hiveserver服务:hive --service hiveserver2 或者hive --service hiveserver2 &  

111144_ZjWm_2846946.png

6.启动Hive Metastore服务

在hive机器上启动Hive Metastore服务:hive --service metastore或者hive --service metastore &     

132512_UL4f_2846946.png

看到如下信息,说明启动完成:

132641_wcjJ_2846946.png

7.验证启动

在终端输入jps -ml查看:

133546_Ta0S_2846946.png

可以看到hadoop集群个hive服务启动都正常

三、开始编码

1.编写jdbc工具类

编写打开hive连接的方法

 112536_RhQz_2846946.png

代码块:

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连接的方法

103912_4MuE_2846946.png

代码块:

// 关闭连接	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();		}	}

测试连接 

105051_g9oA_2846946.png

代码块:

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方法

105705_UaPX_2846946.png

发生异常,这是因为缺少hive驱动包,我们在项目中导入以下jar包即

112143_VOJD_2846946.png           

然后继续测试,连接成功

112246_SbHm_2846946.png

2.基本查询操作

131610_0tYh_2846946.png

代码块:

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";

132000_xy5l_2846946.png

2>.查看表结构

sql="desc tb_user";

132150_G2XI_2846946.png

3>.统计查询

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

144906_x1vn_2846946.png

4>.表查询

sql="show tables ";

145456_es5O_2846946.png

以下的创建删除表等操作没有rs结果,使用DLL语句的处理方法

150341_WvJy_2846946.png

代码块:   

// 数据操作	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表

150657_c66U_2846946.png

6>.删除表

sql="drop table if exists tb_test";

然后执行show tables 可以看到创建的tb_test表已经删除

151842_7mVj_2846946.png

四、总结

        以上就是本文使用java代码通过jdbc的方式连接hive进行的简单的一些DLL查询和DML查询操作,在实际开发中相比之前的hive shell方式,使用代码去操作的方式用的更多点。本文的测试代码已经上传码云,代码地址为:https://gitee.com/MaxBill/HSDP

           

转载于:https://my.oschina.net/zss1993/blog/1607880

你可能感兴趣的文章
[导入]Wap系统中Session信息保存问题解决方法
查看>>
动态输出javascript
查看>>
android_error
查看>>
Zepto源码注释
查看>>
系统空闲时间 解决 GetLastInputInfo 负数问题
查看>>
云搜索服务在APP搜索场景的应用
查看>>
怎样设置域名带www和不带www都可以访问
查看>>
二元关系最小割
查看>>
Linux 下四条高大命令(计划360检测脚本)
查看>>
Android:Activity(六):Fragment详解
查看>>
tensorflow中张量、常量、变量、占位符
查看>>
在ajax请求后台时在请求标头RequestHeader加token
查看>>
SRM 408(1-250pt, 1-500pt)
查看>>
UGUI 之 控件以及按钮的监听事件系统 存档
查看>>
批量给文件或者文件夹重命名
查看>>
springMVC常用注解
查看>>
ORACLE SQL基础
查看>>
day58——Saltstack二次开发(二)
查看>>
各种算法
查看>>
asp.net文章内容分页方法
查看>>