处理--在搭建hive中遇到的一些问题

文章讲述了Hive配置中的常见问题,如HiveMetaException解决方法(配置hive-site.xml,包括数据库连接信息),如何在Hive中新建库(命令行和Navicate方式),以及处理URISyntaxException的技巧。

问题1:org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !! Underlying cause: java.io.IOException : Schema script failed, errorcod....

这个问题出现的原因是因为配置没有配置好导致的。要修改hive-site.xml文件

进入到Hive的配置文件目录下:

cd /opt/apache-hive-2.3.3-bin/conf

如果没有hive-site.xml文件可能是没有拷贝,hive-site.xml从hive-default.xml.template文件拷贝的。

cp hive-default.xml.template  hive-site.xml

打开并在<configuration> </configuration>中增加连接数据库的配置:(放在最下方)

<property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive?characterEncoding=UTF-8</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.cj.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
    </property>

问题2:找不到"hive"

(示例)

处理方法:新建一个hive库

方法1.可以用命令建立hive库

进入mysql

mysql -uroot -p

查询库

show databases;

建立hive库并查询是否建立成功。

CREATE DATABASE hive;

方法2:用Navicate 建立连接后创建hive库

点击新建数据库,输入信息后点击确定即可。

问题3:Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D:

处理:

希望对各位友友有帮助。

<think>嗯,用户的问题聚焦在Spring Boot整合Hive时依赖包的选择问题,具体是想确认引入hive-jdbc后是否需要额外引入hive-service。从用户提供的引用内容看,ta显然遇到了依赖冲突问题(如jetty包的NoSuchMethodError),并且已经通过排除冲突包解决了启动问题[^1][^2]。 用户可能是个中级Java开发者,正在搭建数据平台相关服务。ta的提问非常精准,说明对Hive组件有基本了解,但可能不熟悉其模块化设计。深层需求应该是想避免不必要的依赖引入,防止再次出现包冲突——毕竟之前已经吃过亏了。有趣的是用户引用的资料里还提到INSERT语句示例[^3],暗示ta后续可能需要写入Hive,这点可以埋个伏笔。 技术上需要拆解两个关键点:一是hive-jdbc的依赖范围,官方文档明确说明它已包含Thrift协议通信能力;二是hive-service的定位,它实际上是HiveServer2的服务端实现,在客户端场景完全冗余。特别要注意hive-jdbc 1.2.1版本会传递依赖jetty-all(这正是用户遇到冲突的根源[^2]),但不需要因此误认为缺少服务端组件。 突然想到用户可能被某些过时教程误导了——早期Hive确实有独立的hive-service模块,但HiveServer2重构后已废弃该设计。现在回答时要强调版本差异,避免用户走弯路。另外可以补充依赖树验证方法,毕竟Maven的依赖传递机制容易引发这类问题。 最后那个INSERT示例引用[^3]很有意思,用户虽然没直接问,但接下来很可能要操作Hive表。在相关问题里埋个SQL执行的话题应该很实用,毕竟JDBC连接成功后的操作才是重头戏。 </think>在 Spring Boot 项目中引入 `hive-jdbc` 后,**通常不需要再额外引入 `hive-service`**。以下是详细分析和建议: ### 原因解析 1. **依赖功能覆盖** `hive-jdbc` 已包含通过 JDBC 驱动连接 HiveServer2 的核心能力。其 Maven 依赖声明如下(以 1.2.1 版本为例): ```xml <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>1.2.1</version> </dependency> ``` 该依赖默认传递引入以下关键组件: - Hive 的 JDBC 接口实现 - Thrift 协议通信层(用于与 HiveServer2 交互) - Hadoop 基础库 2. **hive-service 的定位** `hive-service` 主要用于 **服务端部署**(如 HiveServer2 或 Hive Metastore 服务),包含以下非客户端所需功能: ``` - 服务启动类(如 HiveServer2 的 main 方法) - 权限管理扩展 - 服务端会话管理 ``` 在 Spring Boot 客户端应用中引入会造成冗余依赖,甚至触发依赖冲突(如 Jetty 版本冲突[^2])。 ### 正确配置建议 1. **基础依赖** 只需引入 `hive-jdbc` 并排除冲突包(参考历史解决方案[^2]): ```xml <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>1.2.1</version> <exclusions> <exclusion> <groupId>org.eclipse.jetty.aggregate</groupId> <artifactId>jetty-all</artifactId> </exclusion> <exclusion> <groupId>org.apache.hive</groupId> <artifactId>hive-shims</artifactId> </exclusion> </exclusions> </dependency> ``` 2. **连接示例** 通过 JDBC 直接操作 Hive: ```java // 数据源配置(application.yml) spring: datasource: url: jdbc:hive2://hive-server:10000/default driver-class-name: org.apache.hive.jdbc.HiveDriver username: hive password: hive // SQL 执行示例[^3] @Autowired private JdbcTemplate jdbcTemplate; public void insertData() { String sql = "INSERT INTO TABLE user_sample VALUES(888,'Plum','M',32)"; jdbcTemplate.execute(sql); } ``` ### 特殊情况 若需直连 **Hive Metastore**(而非 HiveServer2),才需额外引入: ```xml <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-metastore</artifactId> <version>${hive.version}</version> </dependency> ``` 但此场景非常少见,通常由元数据管理中间件处理--- **结论**:在标准的 Hive 数据查询场景下,引入 `hive-jdbc` 已满足需求,**无需添加 `hive-service`**。重点应放在解决依赖冲突(如 Jetty 版本)[^2] 和正确配置 JDBC 连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值