SpringBoot 3 集成Hive 3

ゞ 浴缸里的玫瑰 2024-04-23 16:01 111阅读 0赞

前提条件:

运行环境:Hadoop 3.* + Hive 3.* + MySQL 8 ,如果还未安装相关环境,请参考:Hive 一文读懂

Centos7 安装Hadoop3 单机版本(伪分布式版本)

SpringBoot 2 集成Hive 3

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>SpringBootCase</artifactId>
  7. <groupId>org.example</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>SpringBoot-Hive3</artifactId>
  12. <properties>
  13. <maven.compiler.source>8</maven.compiler.source>
  14. <maven.compiler.target>8</maven.compiler.target>
  15. </properties>
  16. <dependencies>
  17. <dependency>
  18. <groupId>org.apache.hive</groupId>
  19. <artifactId>hive-jdbc</artifactId>
  20. <version>3.1.2</version>
  21. <exclusions>
  22. <exclusion>
  23. <artifactId>slf4j-log4j12</artifactId>
  24. <groupId>org.slf4j</groupId>
  25. </exclusion>
  26. <exclusion>
  27. <artifactId>log4j-api</artifactId>
  28. <groupId>org.apache.logging.log4j</groupId>
  29. </exclusion>
  30. <exclusion>
  31. <artifactId>log4j-core</artifactId>
  32. <groupId>org.apache.logging.log4j</groupId>
  33. </exclusion>
  34. <exclusion>
  35. <artifactId>log4j</artifactId>
  36. <groupId>log4j</groupId>
  37. </exclusion>
  38. <exclusion>
  39. <artifactId>log4j-slf4j-impl</artifactId>
  40. <groupId>org.apache.logging.log4j</groupId>
  41. </exclusion>
  42. <exclusion>
  43. <groupId>org.eclipse.jetty</groupId>
  44. <artifactId>jetty-runner</artifactId>
  45. </exclusion>
  46. </exclusions>
  47. </dependency>
  48. <dependency>
  49. <groupId>org.springframework.boot</groupId>
  50. <artifactId>spring-boot-starter-jdbc</artifactId>
  51. </dependency>
  52. </dependencies>
  53. </project>

配置application.properties

  1. server.port=8083
  2. # hive 驱动名称
  3. spring.datasource.driver-class-name=org.apache.hive.jdbc.HiveDriver
  4. # hive 数据库地址 = jdbc:hive2://hive 服务器地址:10000/default(默认数据库名称)
  5. spring.datasource.url=jdbc:hive2://192.168.43.11:10000/default
  6. # hive 服务器用户名
  7. spring.datasource.username=root
  8. # hive 服务器密码
  9. spring.datasource.password=123456

编写Controller和应用入口

我这边编写一个简单的Controller,打印Hive 默认数据库包含数据库名称。

  1. package cn.zzg.hive.controller;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.jdbc.core.JdbcTemplate;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. import java.util.List;
  7. import java.util.Map;
  8. @RestController
  9. @RequestMapping("/hive")
  10. public class HiveController {
  11. @Autowired
  12. private JdbcTemplate jdbcTemplate;
  13. @RequestMapping("/list")
  14. public List<Map<String, Object>> list() {
  15. String sql = "show databases";
  16. List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
  17. return list;
  18. }
  19. }
  20. package cn.zzg.hive;
  21. import org.springframework.boot.SpringApplication;
  22. import org.springframework.boot.autoconfigure.SpringBootApplication;
  23. @SpringBootApplication
  24. public class Application {
  25. public static void main(String[] args) {
  26. SpringApplication.run(Application.class, args);
  27. }
  28. }

效果截图:

0a171b8a68e540f68a94d6c290d78cf3.png

SpringBoot 2 集成Hive 3 遇到的问题

问题一:Class path contains multiple SLF4J bindings,日志依赖重复冲突。

造成此问题的原因是:spring boot 默认日志为logback, 而引用的hive-jdbc 及其关联jar 使用的日志为 log4j ,造成SLF4J 绑定冲突。

解决办法:移除冲突的日志:log4j

  1. <exclusion>
  2. <artifactId>slf4j-log4j12</artifactId>
  3. <groupId>org.slf4j</groupId>
  4. </exclusion>
  5. <exclusion>
  6. <artifactId>log4j-api</artifactId>
  7. <groupId>org.apache.logging.log4j</groupId>
  8. </exclusion>
  9. <exclusion>
  10. <artifactId>log4j-core</artifactId>
  11. <groupId>org.apache.logging.log4j</groupId>
  12. </exclusion>
  13. <exclusion>
  14. <artifactId>log4j</artifactId>
  15. <groupId>log4j</groupId>
  16. </exclusion>
  17. <exclusion>
  18. <artifactId>log4j-slf4j-impl</artifactId>
  19. <groupId>org.apache.logging.log4j</groupId>
  20. </exclusion>

问题二:SpringBoot 自带容器Tomcat 与Hive JDBC 关联Jetty 容器冲突

  1. An attempt was made to call the method org.apache.tomcat.util.ExceptionUtils.preload()V but it does not exist. Its class, org.apache.tomcat.util.ExceptionUtils, is available from the following locations:
  2. jar:file:/E:/maven_repository/org/eclipse/jetty/jetty-runner/9.3.20.v20170531/jetty-runner-9.3.20.v20170531.jar!/org/apache/tomcat/util/ExceptionUtils.class
  3. jar:file:/E:/maven_repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.12/tomcat-embed-core-9.0.12.jar!/org/apache/tomcat/util/ExceptionUtils.class

解决办法:移除Hive JDBC 依赖的Jetty 容器。

  1. <exclusion>
  2. <groupId>org.eclipse.jetty</groupId>
  3. <artifactId>jetty-runner</artifactId>
  4. </exclusion>

问题三:通过JDBC 连接Hive 数据库提示:

  1. java.net.ConnectException: Connection refused

造成此类 问题的原因:hiveserver2 服务没有正常启动。

解决办法: 切换至hive 安装目录的bin/ 文件夹下(/usr/local/hive/bin),执行如下命令:

  1. # 方式一
  2. hiveserver2 &
  3. # 方式二
  4. hive --service hiveserver2

问题四:访问Hive 数据库,提示无权限问题:

造成此类问题的原因:hadoop 没有配置权限导致。

解决办法:切换至hadoop 安装目录的/etc文件夹下(/usr/local/hadoop/etc/hadoop/core-site.xml),添加如下配置:

  1. <property>
  2. <name>hadoop.proxyuser.root.hosts</name>
  3. <value>*</value>
  4. </property>
  5. <property>
  6. <name>hadoop.proxyuser.root.groups</name>
  7. <value>*</value>
  8. </property>

发表评论

表情:
评论列表 (有 0 条评论,111人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringBoot3集成WebSocket

    WebSocket通过一个TCP连接在客户端和服务器之间建立一个全双工、双向的通信通道,使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据,在W...

    相关 SpringBoot3集成Kafka

    一、简介 Kafka是一个开源的分布式事件流平台,常被用于高性能数据管道、流分析、数据集成和关键任务应用,基于Zookeeper协调的处理平台,也是一种消息系统,具有更好

    相关 SpringBoot3集成RocketMq

    一、简介 RocketMQ因其架构简单、业务功能丰富、具备极强可扩展性等特点被广泛应用,比如金融业务、互联网、大数据、物联网等领域的业务场景; 二、环境部署 1