8springboot 调用hive 操作数据库的bug

博客讲述了在SpringBoot项目中调用Hive操作数据库时遇到的类加载错误。问题由mysql连接器驱动版本不匹配引起。解决方案包括:检查服务器上的mysql驱动版本,修改pom.xml文件中hive-jdbc的版本为1.1.0,避免不同版本冲突,以及统一hive-service相关依赖的版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1  java.lang.NoClassDefFoundError: org/apache/hive/service/cli/thrift/TCLIService$Iface

解决加载类加载不进去的方法:

https://blog.youkuaiyun.com/u010429286/article/details/78780145

 

特此:粘出最终板的pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.pengjunlee</groupId>
	<artifactId>spring-boot-hive</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.4.RELEASE</version>
		<relativePath />
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>

		</dependency>
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-hadoop</artifactId>
			<version>2.5.0.RELEASE</version>
		</dependency>
		 <!--<dependency>-->
		    <!--<groupId>org.apache.hive</groupId>-->
		    <!--<artifactId>hive-service</artifactId>-->
		    <!--<version>1.1.0-cdh5.11.0</version>-->
		<!--</dependency>-->
		<dependency>
		    <groupId>org.apache.thrift</groupId>
		    <artifactId>libthrift</artifactId>
		    <version>0.11.0</version>
		    <type>pom</type>
		</dependency>
		<dependency>
			<groupId>org.apache.hive</groupId>
			<artifactId>hive-jdbc</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.apache.hive</groupId>
					<artifactId>hive-service-rpc</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.hive</groupId>
					<artifactId>hive-service</artifactId>
				</exclusion>
			</exclusions>
			<version>1.1.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hive</groupId>
			<artifactId>hive-service</artifactId>
			<version>1.1.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.tomcat</groupId>
<think>我们正在处理用户关于SpringBoot连接Hive数据库的请求。根据用户提供的引用内容,我们有一个关于多数据源配置的示例,但该示例涉及MySQL,而用户需要的是HiveHive通常通过JDBC连接,因此配置过程类似,但驱动和URL不同。我们需要提供以下信息:1.添加HiveJDBC驱动依赖。2.配置Hive数据源(在application.properties或application.yml中)。3.创建Hive数据源配置类(类似于多数据源配置,但这里我们只关注Hive)。4.使用JdbcTemplate或SpringData操作Hive。注意:Hive的JDBC驱动类名和URL格式。步骤:1.依赖:通常使用`org.apache.hive`的`hive-jdbc`驱动。但请注意,Hive版本与驱动版本的匹配。2.配置属性示例:spring.hive.datasource.url=jdbc:hive2://<host>:<port>/<database>spring.hive.datasource.driver-class-name=org.apache.hive.jdbc.HiveDriverspring.hive.datasource.username=<username>spring.hive.datasource.password=<password>3.配置类:由于SpringBoot没有为Hive提供自动配置,我们需要手动创建数据源。我们可以使用`@Configuration`和`@Bean`来创建Hive的DataSource和JdbcTemplate。但是,用户可能只需要连接一个Hive数据源,所以我们先提供单数据源的配置。示例代码:步骤1:在pom.xml中添加依赖(请根据Hive版本选择,这里以Hive3.1.2为例):```xml<dependency><groupId>org.apache.hive</groupId><artifactId>hive-jdbc</artifactId><version>3.1.2</version></dependency>```步骤2:在application.properties中配置:```properties#Hive数据源配置spring.datasource.hive.url=jdbc:hive2://localhost:10000/defaultspring.datasource.hive.driver-class-name=org.apache.hive.jdbc.HiveDriverspring.datasource.hive.username=hivespring.datasource.hive.password=```注意:这里使用了`spring.datasource.hive`前缀,这样我们可以创建单独的数据源。步骤3:创建Hive数据源配置类:```java@ConfigurationpublicclassHiveConfig{@Bean(name="hiveDataSource")@ConfigurationProperties(prefix="spring.datasource.hive")publicDataSourcehiveDataSource(){returnDataSourceBuilder.create().build();}@Bean(name="hiveJdbcTemplate")publicJdbcTemplatehiveJdbcTemplate(@Qualifier("hiveDataSource")DataSourcedataSource){returnnewJdbcTemplate(dataSource);}}```步骤4:使用JdbcTemplate操作Hive:```java@RepositorypublicclassHiveDao{@Autowired@Qualifier("hiveJdbcTemplate")privateJdbcTemplatehiveJdbcTemplate;publicList<String>listTables(){returnhiveJdbcTemplate.queryForList("SHOWTABLES",String.class);}}```注意事项:1.Hive的JDBC连接可能需要依赖Hadoop的配置,特别是如果HiveServer2启用了安全认证(如Kerberos),配置会更复杂。2.确保HiveServer2服务已启动,并且可以访问。3.如果连接失败,检查网络、端口(默认10000)、防火墙等。由于用户之前提到了多数据源配置,如果用户需要同连接Hive和MySQL,可以按照多数据源的配置方式,分别为每个数据源创建配置类,并指定不同的前缀。以上是一个基本的连接示例。根据用户要求,生成相关问题:1.如何解决SpringBoot连接Hive的认证问题(如Kerberos)?2.使用JdbcTemplate操作Hive有哪些注意事项?3.SpringBoot连接Hive如何配置连接池?</think>### Spring Boot 连接 Hive 数据库配置指南 以下是完整的 Spring Boot 连接 Hive 数据库的解决方案,包含配置步骤和示例代码: --- #### 1. **添加 Maven 依赖** 在 `pom.xml` 中添加 Hive JDBC 驱动依赖: ```xml <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>3.1.2</version> <!-- 匹配您的Hive版本 --> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> ``` --- #### 2. **配置数据源参数** 在 `application.properties` 中添加 Hive 连接配置: ```properties # Hive 数据源配置 spring.datasource.hive.url=jdbc:hive2://hive-server-host:10000/default spring.datasource.hive.driver-class-name=org.apache.hive.jdbc.HiveDriver spring.datasource.hive.username=hive spring.datasource.hive.password= # 若无密码则留空 # 连接池配置(可选) spring.datasource.hive.initial-size=5 spring.datasource.hive.max-active=20 ``` > **注意**: > - 替换 `hive-server-host` 为您的 Hive 服务器地址 > - 默认端口为 `10000`,数据库名 `default` 按需修改 --- #### 3. **创建 Hive 数据源配置类** ```java @Configuration public class HiveDataSourceConfig { @Bean(name = "hiveDataSource") @ConfigurationProperties(prefix = "spring.datasource.hive") public DataSource hiveDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "hiveJdbcTemplate") public JdbcTemplate hiveJdbcTemplate( @Qualifier("hiveDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } } ``` --- #### 4. **使用 JdbcTemplate 操作 Hive** ```java @Repository public class HiveRepository { @Autowired @Qualifier("hiveJdbcTemplate") private JdbcTemplate hiveJdbcTemplate; // 示例:查询 Hive 表数据 public List<String> getTableNames() { return hiveJdbcTemplate.queryForList("SHOW TABLES", String.class); } // 示例:执行 HiveQL public void createTable(String tableName) { String sql = "CREATE TABLE " + tableName + " (id INT, name STRING)"; hiveJdbcTemplate.execute(sql); } } ``` --- #### 5. **常见问题解决方案** 1. **驱动类加载问题** 确认驱动版本与 Hive 服务器版本一致,避免 `ClassNotFoundException`。 2. **Kerberos 认证** 若需 Kerberos 认证,在 URL 中添加参数: ```properties spring.datasource.hive.url=jdbc:hive2://host:10000/;principal=hive/_HOST@REALM ``` 3. **连接超处理** 在 URL 后添加超参数: ```properties jdbc:hive2://host:10000/?socketTimeout=60&connectTimeout=30 ``` --- ### 关键注意事项 - **Hive 权限**:确保应用程序用户有 HDFS 和 Hive 元数据操作权限 - **数据类型映射**:Hive 的 `STRING` 类型对应 Java 的 `String`,`INT` 对应 `Integer` - **操作限制**:Hive JDBC 不支持事务,`UPDATE/DELETE` 操作需开启 ACID 特性 - **性能优化**:批量写入使用 `LOAD DATA` 替代逐条 INSERT > 参考配置示例:[Spring Boot 配置多数据源示例](https://example.com/spring-boot-multi-datasource)[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值