You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hive on Tez插入数据失败:Kryo未注册类ID:95求助

问题:Hive Tez引擎执行Insert操作触发Kryo序列化错误

问题详情

  • 执行语句:hive> insert into music values (1,'Faded');
  • 核心报错:org.apache.hive.com.esotericsoftware.kryo.KryoException: Encountered unregistered class ID: 95
  • 环境配置:Hadoop 3.4.0、Hive 3.1.3、Tez 0.10.2、RHEL 7.9
  • 异常现象:
    • 使用MR作为执行引擎时所有操作正常
    • Tez引擎执行排序、关联等查询正常,但执行Insert操作(beeline/hive cli均触发)报错
    • 报错中提及的HDFS路径不存在

解决步骤

1. 精准注册Kryo序列化类

在Hive配置文件hive-site.xml中添加配置,强制注册缺失的Vector类(适配Insert操作的行批序列化需求):

<property>
  <name>hive.tez.kryo.classesToRegister</name>
  <value>org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch,org.apache.hadoop.hive.ql.exec.vector.LongColumnVector,org.apache.hadoop.hive.ql.exec.vector.BytesColumnVector</value>
</property>

若表包含其他数据类型(如浮点、布尔),需对应添加DoubleColumnVector、BooleanColumnVector等类。

2. 修复Tez与Hive的依赖兼容性

Hive 3.1.3与Tez 0.10.2可能存在Kryo版本冲突:

  • 对比Hive lib目录与Tez lib目录下的kryo-*.jar版本
  • 将Tez lib中的Kryo jar替换为Hive使用的版本
  • 重新打包Tez并分发到HDFS(如果使用分布式Tez部署)

3. 处理HDFS路径问题

针对报错中缺失的HDFS路径:

  • 确认目标表music的存储路径是否存在:hdfs dfs -ls /user/hive/warehouse/music(替换为实际路径)
  • 检查Tez临时工作目录权限:hdfs dfs -chmod -R 770 /tmp/hive/tez
  • 手动创建缺失路径:hdfs dfs -mkdir -p /报错中显示的缺失路径

4. 调整Tez序列化配置

在tez-site.xml中添加以下配置,放宽Kryo序列化限制:

<property>
  <name>tez.runtime.kryo.serializer.buffer.mb</name>
  <value>64</value>
</property>
<property>
  <name>tez.runtime.kryo.serializer.buffer.max.mb</name>
  <value>128</value>
</property>
<property>
  <name>tez.runtime.kryo.registrationRequired</name>
  <value>false</value>
</property>

注:registrationRequired设为false会允许自动注册未定义类,可能解决类ID未注册问题,但会有轻微性能开销,优先尝试精准注册方案。

5. 重置缓存

  • 清除Hive本地缓存:rm -rf /tmp/hive-${USER}(替换为实际运行Hive的用户名)
  • 重启YARN服务,清除Tez AM缓存
  • 重新执行Insert语句

内容的提问来源于stack exchange,提问作者Kaung Htet Hein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:38:10