Hive异常:报错:org.apache.hadoop.conf.Configuration.getPassword(Ljava/lang/String;)[C-解决问题同时搭建Hive环境

解决Hive连接MySQL元数据异常及配置步骤
本文档详细介绍了在遇到Hive无法实例化SessionHiveMetaStoreClient异常时的解决方法,包括降级Hive版本至2.3.9,将JDBC驱动放入Hive的lib目录,创建hive-site.xml配置文件,初始化MySQL元数据库,启动Hadoop集群和Hive。此外,还提供了在MySQL中创建metastore数据库和配置相关属性的步骤。

一、问题分析

当我们进入Hive Shell窗口时,执行HQL操作将会报错:
Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

然后还会报出异常
org.apache.hadoop.conf.Configuration.getPassword(Ljava/lang/String;)

我的环境是3.1的Hive和Hadoop3.x的,官方的解释是支持的,可能是jar包的绑定冲突,因为大数据是一个生态圈,可能一个不兼容的问题,导致整个的生态的崩溃。
所以万事不决洛必达
直接降版本
来到清华开源的软件镜像站,下载一个2.3.9的Hive
https://mirrors.tuna.tsinghua.edu.cn/
在这里插入图片描述

点进apache下找到hive目录下,就能看到
在这里插入图片描述

二、解决问题

下载好之后上传到Linux系统当中,然后解压并配置环境变量

使用Derby数据库存储元数据
初始化元数据库

bin/schematool -dbType derby -initSchema

使用MySQL充当Hive元数据

这样做的好处就是多用户协调

1、将JDBC驱动拷入到Hive家目录下的lib目录

cp JDBC驱动包位置  $HIVE_HOME/lib

2、在Hive家目录/conf创建一个hive-site.xml文件

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <!-- jdbc 连接的 URL -->
 <property>
 <name>javax.jdo.option.ConnectionURL</name>
 <value>jdbc:mysql://安装的机器上:3306/metastore?useSSL=false</value>
</property>
 <!-- jdbc 连接的 Driver-->
 <property>
 <name>javax.jdo.option.ConnectionDriverName</name>
 <value>com.mysql.jdbc.Driver</value>
</property>
<!-- jdbc 连接的 username-->
 <property>
 <name>javax.jdo.option.ConnectionUserName</name>
 <value>mysql的用户</value>
 </property>
 <!-- jdbc 连接的 password -->
 <property>
 <name>javax.jdo.option.ConnectionPassword</name>
 <value>mysql设置的密码</value>
</property>
 <!-- Hive 元数据存储版本的验证 -->
 <property>
 <name>hive.metastore.schema.verification</name>
 <value>false</value>
</property>
 <!--元数据存储授权-->
 <property>
 <name>hive.metastore.event.db.notification.api.auth</name>
 <value>false</value>
 </property>
 <!-- Hive 默认在 HDFS 的工作目录 -->
 <property>
 <name>hive.metastore.warehouse.dir</name>
 <value>/user/hive/warehouse</value>
 </property>
</configuration>

3、登录到MySQL创建数据库metastore

systemctl start mysql
mysql -uroot -p
create database metastore
quit

4、初始化元数据库

schematool -initSchema -dbType mysql -verbose

5 、启动Hadoop集群

$HADOOP_HOME/sbin/start-all.sh

6、启动Hive

bin/hive
show tables;

在这里插入图片描述
到这里就结束了,也就成功了,希望小伙们能记住这个问题,也别忘了收藏哦⭐⭐⭐

<think>嗯,用户遇到了一个典型的Hive JDBC连接时的类缺失错误,核心问题是JVM找不到HiveConf$ConfVars这个内部类。从报错信息看,用户应该是在Java应用程序中通过JDBC连接Hive时触发的。 用户提供的两份站内引用很有价值:引用[1]提到了Hadoop环境变量配置问题,引用[2]则关联到Hive环境配置。不过用户当前场景更聚焦在JDBC客户端使用,而非Hive服务端启动问题——这点需要明确区分。 深层分析可能有三个方向的问题源:首先是依赖冲突,用户的项目pom/gradle中可能同时存在多个版本的hive-exec或hive-metastore依赖;其次是类加载问题,当HadoopHive版本不匹配时,HiveConfConfVars内部类结构可能发生变化;最后是作用域问题,runtime范围的依赖未被正确打包。 用户身份推测是Java后端开发或数据工程师,正在开发连接Hive的应用程序。ta的提问非常专业,直接给出了完整错误类名,说明对异常堆栈有基本解读能力。但ta没有提及具体开发环境(如Maven/Gradle)和Hadoop/Hive版本信息,这会是关键线索。 解决方案需要分层处理:先做基础检查(版本兼容性、依赖树分析),再用Maven Dependency Plugin定位冲突。特别要注意hive-jdbc依赖本身不包含hive-conf,必须显式引入hive-exec。对于Spark环境还要警惕provided作用域导致的运行时缺失。 考虑到用户使用JDBC连接,补充了连接串配置的注意事项——包括zoo.cfg路径这类易错点。最后的安全建议很重要,因为调试过程可能需要多次清理本地仓库缓存。 相关问题的设计侧重扩展性:第一个问题针对依赖排查工具的使用实操,第二个引导用户思考更隐蔽的依赖传递问题,第三个则是版本矩阵这类预防性措施。用户如果连续遇到类似问题,可能需要建立内部的依赖兼容性对照表。 </think>根据报错信息和Hive JDBC的使用场景,该错误的根本原因是**Hive配置类在运行时缺失**。以下是系统化的解决方案: ### 核心解决方案 1. **添加Hive配置依赖** 在项目的构建文件中添加Hive核心配置依赖(以Maven为例): ```xml <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>${hive.version}</version> <!-- 需与集群版本一致 --> </dependency> ``` > 关键说明:`hive-jdbc`依赖本身**不包含**`HiveConf`类,必须显式引入`hive-exec`或`hive-common`[^1]。 2. **检查版本兼容性** 确保所有Hadoop/Hive组件的版本严格匹配: ```bash hadoop version # 集群Hadoop版本 hive --version # 集群Hive版本 ``` 客户端依赖需与集群版本对齐,版本差异超过0.1.x通常会导致类加载失败。 3. **排除冲突依赖** 使用Maven依赖树排查冲突(执行`mvn dependency:tree`): ```xml <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>3.1.2</version> <exclusions> <exclusion> <groupId>org.apache.hive</groupId> <artifactId>hive-service</artifactId> </exclusion> </exclusions> </dependency> ``` ### 补充排查步骤 4. **检查类路径包含情况** 运行时验证是否包含Hive配置类: ```java try { Class.forName("org.apache.hadoop.hive.conf.HiveConf&quot;); } catch (ClassNotFoundException e) { System.err.println("HiveConf类缺失!&quot;); } ``` 5. **配置JDBC连接参数** 在连接字符串中显式指定配置源(尤其ZooKeeper场景): ```java String url = "jdbc:hive2://zk_node:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2"; ``` 6. **Hadoop环境变量修复** 若同时存在Hadoop集成问题,检查环境变量配置: ```bash # 在hadoop-env.sh中添加(路径替换为实际值) export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*.jar ``` ### 典型误区和注意事项 - **Spark项目特殊处理**: Spark内置的Hive库可能冲突,需在`spark-submit`添加`--conf spark.sql.hive.metastore.jars=path/to/hive_libs` - **Web应用部署问题**: WAR包需确保`hive-exec.jar`位于`WEB-INF/lib`目录 - **IDE运行时配置**: 在IDEA的Run Configuration中明确添加依赖项作用域为`Runtime` > **重要提示**:若集群使用Kerberos认证,还需同步配置`hive-site.xml`中的认证参数[^2]。 --- ###
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Philosophy7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值