文档章节

hive(05)、使用JAVA对数据仓库HIVE进行操作

MaxBill
 MaxBill
发布于 2018/01/16 15:49
字数 1248
阅读 760
收藏 7

        本文代码码云地址: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项目

2.创建如上的包

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

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

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服务启动都正常

三、开始编码

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表已经删除

四、总结

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

           

© 著作权归作者所有

MaxBill

MaxBill

粉丝 56
博文 81
码字总数 65801
作品 1
宝山
后端工程师
私信 提问
0035-如何使用Sentry管理Hive外部表(补充)

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 1.文档编写目的 本文文档主要讲述如何使用Sentry管理Hive/Impala外部表权限。 内容概述 1.创建测试库及外部表 2.创建角色并...

Hadoop实操
2018/11/22
47
0
0031-如何在CDH启用Kerberos的情况下安装及使用Sentry(一)

1.文档编写目的 本文档主要讲述如何在启用Kerberos的CDH集群中安装配置及使用Sentry。 内容概述 1.如何安装Sentry服务 2.Hive/Impala/Hue/HDFS服务如何与Sentry集成 3.Sentry测试 测试环境 ...

Hadoop实操
2018/11/21
23
0
深入学习Hive应用场景及架构原理

col1 ARRAY< INT>, col2 MAP< STRING,INT>, col3 STRUCT< a:STRING,b:INT,c:DOUBLE> ) (三)类型转化 Hive 的原子数据类型是可以进行隐式转换的,类似于 Java 的类型转换,例如某表达式使用......

py_123456
2018/05/12
0
0
基于docker的spark-hadoop分布式集群之二: 环境测试

在上一节搭建的集群环境基础上,本节对各个模块做个测试 Mysql 测试 1、Mysql节点准备 为方便测试,在mysql节点中,增加点数据 进入主节点 进入数据库节点 创建数据库 创建数据表 增加几条数...

Fordestiny
2018/08/16
0
0
1、Hive的简介、原理及安装

一、简介 Hive是一个SQL解析引擎,他可以将sql转化为 TEZ、mapreduce、spark 等计算框架并且提交到yarn等资源调度平台上进行计算。它借助于MySQL数据库对hdfs上的文件进行表的映射,从而知道...

刘付kin
2016/12/01
55
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
今天
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
今天
6
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
9
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
5
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部