hive用java_Hive(05)使用Java对数据仓库Hive进行操作

本文介绍了如何使用Java通过JDBC连接Hive服务,进行数据仓库的基本操作,包括连接准备、代码编写、测试连接、基本查询和数据操作。提供了从创建连接到执行DDL和DML语句的示例代码。
摘要由CSDN通过智能技术生成

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

一、环境准备

1.Hadoop集群

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

3.Hive数据仓库服务

4.Eclipse开发工具

二、开发准备

1.创建一个空的java项目

loading.gif

2.创建如上的包

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

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

3.启动Hadoop集群

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

28a7c3631554c211fb1497ddfa4e0a4d.gif

4.启动元数据库服务

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

5.启动Hiveserver2服务

在Hive机器上启动Hiveserver服务:hive –service hiveserver2 或者hive –service hiveserver2 &

28a7c3631554c211fb1497ddfa4e0a4d.gif

6.启动Hive Metastore服务

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

28a7c3631554c211fb1497ddfa4e0a4d.gif

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

28a7c3631554c211fb1497ddfa4e0a4d.gif

7.验证启动

在终端输入jps -ml查看:

28a7c3631554c211fb1497ddfa4e0a4d.gif

可以看到Hadoop集群个Hive服务启动都正常

三、开始编码

1.编写jdbc工具类

编写打开Hive连接的方法

28a7c3631554c211fb1497ddfa4e0a4d.gif

代码块:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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

28a7c3631554c211fb1497ddfa4e0a4d.gif

代码块:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16// 关闭连接

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();

}

}

测试连接

28a7c3631554c211fb1497ddfa4e0a4d.gif

代码块:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

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

28a7c3631554c211fb1497ddfa4e0a4d.gif

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

28a7c3631554c211fb1497ddfa4e0a4d.gif

然后继续测试,连接成功

28a7c3631554c211fb1497ddfa4e0a4d.gif

2.基本查询操作

28a7c3631554c211fb1497ddfa4e0a4d.gif

代码块:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46public 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”;

28a7c3631554c211fb1497ddfa4e0a4d.gif

2>.查看表结构

sql=”desc tb_user”;

28a7c3631554c211fb1497ddfa4e0a4d.gif

3>.统计查询

sql=”SELECT COUNT(id) FROM tb_user “;

28a7c3631554c211fb1497ddfa4e0a4d.gif

4>.表查询

sql=”show tables “;

28a7c3631554c211fb1497ddfa4e0a4d.gif

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

28a7c3631554c211fb1497ddfa4e0a4d.gif

代码块:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17// 数据操作

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表

28a7c3631554c211fb1497ddfa4e0a4d.gif

6>.删除表

sql=”drop table if exists tb_test”;

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

28a7c3631554c211fb1497ddfa4e0a4d.gif

四、文末总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值