hive-3.1.3(hive-3.0.0) on tez-0.10.2 详细操作步骤(附编译好的安装包)

这里有两个不同的版本已经编译好的包

1.hive-3.1.3 与 tez-0.10.2以及hadoop-3.3.4
2.hive-3.0.0 与 tez-0.10.2以及hadoop-3.2.2

在上一篇文章中有相关的安装包,需要的话,自行去下载

编译好的包

tez-0.10.2-minimal.tar.gz
tez-0.10.2.tar.gz

hive on tez配置

将tez安装包拷贝到集群,并解压tar包到安装目录,*注意解压的是tez-0.10.2-minimal.tar.gz

上传依赖到HDFS(上传的是不带minimal的这个tez-0.10.2.tar.gz),在上传之前先创建目录,操作如下

[appview@master software]$ tar -zxvf tez-0.10.2-minimal.tar.gz  -C /opt/moudle/
### 创建目录
[appview@master software]$ hdfs dfs -mkdir -p /tez-jars
### 上传到hdfs
[appview@master software]$ hdfs dfs -put ./tez-0.10.2.tar.gz  /jars/tez-jars
### 查看是否上传成功
[appview@master software]$ hdfs dfs -ls /jars/tez-jars
​
$HADOOP_HOME/etc/hadoop/路径下配置tez-site.xml

里面的配置可以根据自己的资源大小自行进行调整

[appview@master tez-0.10.2]$ cat /opt/moudle/hadoop-3.3.4/etc/hadoop/tez-site.xml
​
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<
<think>我们正在处理Hive 3.1.3与Spark 3.0.0集成时出现的`Failed to create Spark client`错误。根据用户提供的引用[1],在CDH环境中升级Hive3.1.3后,需要替换Spark相关的jar包(特别是hive-exec的jar包)以确保兼容性。这个错误通常是由于Hive和Spark版本不兼容或配置问题导致的。 ### 错误原因分析 1. **版本不兼容**:Hive 3.1.3与Spark 3.0.0之间存在已知的兼容性问题。Hive 3.1.3需要特定版本的Spark依赖(如hive-exec.jar),而默认的Spark 3.0.0可能不包含这些依赖或版本不匹配。 2. **依赖冲突**:在升级Hive后,Spark的类路径中可能仍然存在旧版本的Hive jar包(如hive-exec-2.1.1.jar),导致Hive on Spark任务无法正确初始化。 3. **配置缺失**:Hive的配置文件中可能未正确指向Spark 3.0.0的库路径,或者Spark的配置中缺少必要的Hive集成参数。 ### 解决方法 根据引用[1]的提示,我们需要替换Spark中的Hive相关jar包。以下是详细步骤: #### 步骤1: 替换Spark中的Hive jar包 1. 进入Spark的安装目录(例如`/opt/cloudera/parcels/CDH/lib/spark`): ```bash cd /opt/cloudera/parcels/CDH/lib/spark ``` 2. 备份原有的Hive依赖目录(如果存在): ```bash mv hive hive.bak # 如果目录名为hive ``` 3. 创建新的hive目录并复制Hive 3.1.3的jar包: ```bash mkdir hive cp /path/to/hive-3.1.3/lib/hive-exec-3.1.3.jar hive/ ``` 注意:确保复制的jar包路径正确(例如,在CDH环境中,路径可能是`/opt/cloudera/parcels/CDH/lib/hive/lib/hive-exec-3.1.3.jar`)。 #### 步骤2: 检查Hive配置 在Hive的配置文件`hive-site.xml`中,确保以下关键配置正确设置: ```xml <property> <name>hive.execution.engine</name> <value>spark</value> </property> <property> <name>spark.master</name> <value>yarn</value> </property> <property> <name>spark.home</name> <value>/path/to/spark</value> <!-- 替换为实际的Spark安装路径 --> </property> <property> <name>spark.submit.deployMode</name> <value>client</value> </property> ``` #### 步骤3: 验证环境变量 确保`SPARK_HOME`环境变量指向Spark 3.0.0的安装目录,并且`HADOOP_CONF_DIR`等环境变量已正确配置。可以在Hive启动脚本(如`hive-env.sh`)中设置: ```bash export SPARK_HOME=/opt/cloudera/parcels/CDH/lib/spark export HADOOP_CONF_DIR=/etc/hadoop/conf ``` #### 步骤4: 重启服务 完成上述步骤后,重启Hive服务(包括Hive Metastore和HiveServer2)以及Spark服务,以使配置生效。 #### 步骤5: 测试插入操作 重新运行插入命令: ```sql insert into student values(101,"code"); ``` ### 其他可能原因及解决方案 - **资源不足**:如果集群资源(如YARN内存)不足,也可能导致Spark客户端创建失败。检查YARN资源管理器日志,确保有足够的资源分配给Spark任务。 - **权限问题**:确保运行Hive命令的用户具有执行Spark任务的权限(例如,在YARN队列中有提交应用的权限)。 ### 总结 该错误主要由Hive和Spark版本不兼容引起,通过替换Spark中的Hive相关jar包(特别是`hive-exec-3.1.3.jar`)并验证配置,通常可以解决。如果问题仍然存在,请检查Spark和YARN的日志以获取更详细的错误信息。 §§相关问题§§ 1. 如何验证Hive on Spark的集成配置是否正确? 2. Hive 3.x与Spark 3.x的兼容性矩阵是怎样的? 3. 如何调整Hive on Spark任务的资源分配(如Executor内存)?</think>### Hive 3.1.3 与 Spark 3.0.0 集成失败的原因及解决方法 #### 🔍 错误原因分析 1. **版本兼容性问题** Hive 3.1.3 与 Spark 3.0.0 存在**关键兼容性缺陷**: - Hive 3.1.3 需要 Spark 3.1.x+ 的特定 API 支持(如 `HiveSparkClient` 类)[^1] - Spark 3.0.0 缺少 Hive 3.1.3 所需的 `hive-exec-3.1.3.jar` 依赖 - 核心错误表现为类加载失败: ```log ClassNotFoundException: org.apache.hive.spark.client.HiveSparkClient ``` 2. **依赖冲突** 当 Hive 和 Spark 共享相同类路径时: - Spark 默认加载旧版 `hive-exec-2.x.x.jar`(与 Hive 3.1.3 不兼容) - 版本冲突导致 Spark 会话初始化失败(错误代码 300413. **配置缺失** Hive on Spark 必需的配置项未正确设置: ```xml <!-- hive-site.xml 缺失关键配置 --> <property> <name>spark.yarn.jars</name> <value>hdfs:///spark/jars/*.jar</value> <!-- 必须指向Spark 3.1+的jars --> </property> ``` #### 🛠️ 解决方法(逐步操作) ##### 步骤 1:升级 Spark 版本(推荐) ```bash # 下载 Spark 3.1.3(与 Hive 3.1.3 兼容) wget https://archive.apache.org/dist/spark/spark-3.1.3/spark-3.1.3-bin-hadoop3.2.tgz # 解压并配置环境变量 tar -xzf spark-3.1.3-bin-hadoop3.2.tgz echo "export SPARK_HOME=/path/to/spark-3.1.3" >> ~/.bashrc source ~/.bashrc ``` ##### 步骤 2:修复依赖冲突(若需保留 Spark 3.0.0) ```bash # 进入 Spark 安装目录 cd $SPARK_HOME/jars # 移除冲突的 Hive 旧版 JAR rm hive-exec-2.*.jar # 复制 Hive 3.1.3 的核心依赖 cp $HIVE_HOME/lib/hive-exec-3.1.3.jar . cp $HIVE_HOME/lib/hive-metastore-3.1.3.jar . ``` ##### 步骤 3:配置 Hive 强制使用兼容版本 在 `hive-site.xml` 添加: ```xml <property> <name>spark.version</name> <value>3.1.3</value> <!-- 强制指定兼容版本 --> </property> <property> <name>hive.spark.client.connect.timeout</name> <value>30000</value> <!-- 增加超时阈值 --> </property> ``` ##### 步骤 4:验证配置 ```bash # 在 Hive CLI 中检查配置 SET spark.version; -- 应返回 3.1.3 SET hive.execution.engine; -- 应返回 spark # 执行测试查询 INSERT INTO student VALUES (102, "test"); ``` #### ⚙️ 配置验证矩阵 | 检查项 | 正确值 | 错误值 | |------------------------|-----------------|---------------| | `spark.version` | 3.1.3 | 3.0.0 | | `hive-exec-*.jar`版本 | 3.1.3 | 2.x.x | | `SPARK_HOME`环境变量 | 指向 Spark 3.1+ | 未设置或错误 | #### 💡 根本解决方案建议 **升级到官方兼容组合**: $$ \text{Hive 3.1.3} + \text{Spark 3.1.3} + \text{Hadoop 3.2.0} $$ 这是 Cloudera 和 Apache 官方验证的兼容组合[^1],可彻底解决类加载冲突问题。 > **关键提示**:CDH 环境中需同步更新 Parcel 包,确保所有节点的 `hive-exec` JAR 版本一致,否则会导致随机初始化失败。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值