Hive学习系列:maven+springboot+CDH环境下,连接Hive进行操作

本文主要是介绍Hive学习系列:maven+springboot+CDH环境下,连接Hive进行操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 场景
  • 环境
  • 正文
    • 确定Hive版本
    • 新建项目,并引入hive-jdbc依赖
    • demo示例
    • 结果
  • 总结
  • 随缘求赞

场景

在当前项目中,因为之前使用数据库查询,而随着数据的增多,查询速度会越来越慢,所以需要使用Java来调用hive进行数据统计。本篇博文主要是使用springboot+hive来查询hive数据,并返回查询的数据结果。

环境

软件版本
springboot2.1.8.RELEASE
CDH5.15.1
Hive1.1.0

正文

确定Hive版本

登录服务器控制台,我们可以使用命令:

hive --version

来查询hive的具体版本,如下图:
在这里插入图片描述

新建项目,并引入hive-jdbc依赖

新建springboot项目,并引入hive-jdbc依赖。目前在maven hive-jdbc仓库中,最新的版本是3.1.2。但是因为我们这里的环境版本是1.1.0,所以要选择1.1.0版本,不然就会代码运行的时候,就会报错。pom.xml引入依赖如下:

<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.6.5</version>
</dependency>
<dependency><groupId>org.apache.hive</groupId><artifactId>hive-jdbc</artifactId><version>1.1.0</version>
</dependency>

一般引入这个依赖就足够了,在本文的样例代码中,跑起来是没有问题的。

demo示例

因为是demo示例,所以这里屏蔽了环境变量取参等可扩展部分,使用一个main方法来调用我们的hive查询相关的方法。demo代码如下:

@SpringBootApplication
@Slf4j
public class AnalysisApp implements CommandLineRunner {private static String driverName = "org.apache.hive.jdbc.HiveDriver";public static void main(String[] args) {SpringApplication.run(AnalysisApp.class, args);}@Overridepublic void run(String... args) throws Exception {try {Class.forName(driverName);} catch (ClassNotFoundException e) {e.printStackTrace();System.exit(1);}Connection con = DriverManager.getConnection("jdbc:hive2://datanode02:10000/test", "hive", "");Statement stmt = con.createStatement();String tableName = "testHiveDriverTable";log.info("删除表");stmt.execute("drop table  if exists " + tableName);stmt.execute("create table " + tableName + " (key int, value string)");// show tablesString sql = "show tables '" + tableName + "'";log.info("Running: " + sql);ResultSet  res = stmt.executeQuery(sql);if (res.next()) {log.info(res.getString(1));}// describe tablesql = "describe " + tableName;log.info("Running: " + sql);res = stmt.executeQuery(sql);while (res.next()) {log.info(res.getString(1) + "\t" + res.getString(2));}// select * querysql = "select * from " + tableName;log.info("Running: " + sql);res = stmt.executeQuery(sql);while (res.next()) {log.info(String.valueOf(res.getInt(1)) + "\t" + res.getString(2));}// regular hive querysql = "select count(1) from " + tableName;log.info("Running: " + sql);res = stmt.executeQuery(sql);while (res.next()) {log.info(res.getString(1));}}
}

在官网Apache Hive HiveClient提供的demo,里面引用的驱动类和我本文的驱动类是不同的,这个是因为引用的jar包是不同的,所以才存在差异。所以,如果运行报错,提示驱动类不存在,则需要到自己引用的jar包里面看看使用的驱动类具体路径是什么。

结果

把代码复制到自己的项目中,执行之后,控制台结果如下:

2020-06-08 13:45:01.457  INFO 4540 --- [           main] c.c.y.b.precision.analysis.AnalysisApp   : Started AnalysisApp in 24.643 seconds (JVM running for 38.374)
2020-06-08 13:45:01.494  INFO 4540 --- [           main] org.apache.hive.jdbc.Utils               : Supplied authorities: datanode02:10000
2020-06-08 13:45:01.495  INFO 4540 --- [           main] org.apache.hive.jdbc.Utils               : Resolved authority: datanode02:10000
2020-06-08 13:45:01.620  INFO 4540 --- [           main] org.apache.hive.jdbc.HiveConnection      : Will try to open client transport with JDBC Uri: jdbc:hive2://datanode02:10000/test
2020-06-08 13:45:01.966  INFO 4540 --- [           main] c.c.y.b.precision.analysis.AnalysisApp   : 删除表
2020-06-08 13:45:02.764  INFO 4540 --- [           main] c.c.y.b.precision.analysis.AnalysisApp   : Running: show tables 'testHiveDriverTable'
2020-06-08 13:45:03.153  INFO 4540 --- [           main] c.c.y.b.precision.analysis.AnalysisApp   : testhivedrivertable
2020-06-08 13:45:03.153  INFO 4540 --- [           main] c.c.y.b.precision.analysis.AnalysisApp   : Running: describe testHiveDriverTable
2020-06-08 13:45:03.418  INFO 4540 --- [           main] c.c.y.b.precision.analysis.AnalysisApp   : key	int
2020-06-08 13:45:03.418  INFO 4540 --- [           main] c.c.y.b.precision.analysis.AnalysisApp   : value	string
2020-06-08 13:45:03.419  INFO 4540 --- [           main] c.c.y.b.precision.analysis.AnalysisApp   : Running: select * from testHiveDriverTable
2020-06-08 13:45:03.723  INFO 4540 --- [           main] c.c.y.b.precision.analysis.AnalysisApp   : Running: select count(1) from testHiveDriverTable
2020-06-08 13:45:26.323  INFO 4540 --- [           main] c.c.y.b.precision.analysis.AnalysisApp   : 0

总结

遇到一个新的需求,最好到官网去看看示例。如果不够详细,也可以搜索一下对应的博客。两者结合,一般可以解决很多问题了。

随缘求赞

如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;
如果有好的讨论,可以留言;
如果想继续查看我以后的文章,可以点击关注
可以扫描以下二维码,关注我的公众号:枫夜之求索阁,查看我最新的分享!
在这里插入图片描述
拜拜

这篇关于Hive学习系列:maven+springboot+CDH环境下,连接Hive进行操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114808

相关文章

MySQL 多表连接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)

《MySQL多表连接操作方法(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLOUTERJOIN)》多表连接是一种将两个或多个表中的数据组合在一起的SQL操作,通过连接,... 目录一、 什么是多表连接?二、 mysql 支持的连接类型三、 多表连接的语法四、实战示例 数据准备五、连接的性

MySQL中的分组和多表连接详解

《MySQL中的分组和多表连接详解》:本文主要介绍MySQL中的分组和多表连接的相关操作,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录mysql中的分组和多表连接一、MySQL的分组(group javascriptby )二、多表连接(表连接会产生大量的数据垃圾)MySQL中的

Java 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows