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

相关文章

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis