基于Tez的Hive插入记录时Tez启动失败求助
Hive插入ACID表时Tez DAGAppMaster启动失败排查方案
核心错误分析
执行INSERT语句触发Tez任务时,DAGAppMaster在初始化阶段失败,核心报错:
java.lang.ClassCastException: org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$GetFileInfoRequestProto cannot be cast to com.google.protobuf.Message
该错误属于Protobuf版本依赖冲突,是由于Hadoop、Tez、Hive三方依赖的Protobuf库版本不一致,导致类加载时出现类型不兼容问题。
解决方案步骤
1. 检查三方Protobuf版本一致性
分别查看Hadoop、Tez、Hive的lib目录下的Protobuf jar包版本:
- 查看Hadoop版本:
ls $HADOOP_HOME/lib/protobuf-java-*.jar - 查看Tez版本:
ls $TEZ_HOME/lib/protobuf-java-*.jar - 查看Hive版本:
ls $HIVE_HOME/lib/protobuf-java-*.jar
确保三者的Protobuf版本完全一致(比如Hadoop 3.3.1默认对应protobuf-java-2.5.0.jar)。
2. 统一Protobuf依赖包
如果发现版本不一致:
- 删除Tez/lib和Hive/lib中与Hadoop版本不匹配的
protobuf-java-*.jar - 从Hadoop/lib目录复制对应版本的
protobuf-java-*.jar到Tez/lib和Hive/lib目录
3. 验证Tez Hadoop Shim兼容性
日志显示加载了DefaultHadoopShim,需确认Tez版本与Hadoop版本的兼容性:
- Tez 0.10.2官方支持Hadoop 3.1.x至3.3.x,若shim包不匹配:
- 检查
$TEZ_HOME/lib/tez-hadoop-shim-*.jar,确保其版本对应Hadoop 3.3.x(如tez-hadoop-shim-3.3.0-0.10.2.jar) - 若shim包版本不符,替换为与Hadoop版本匹配的Tez shim包
- 检查
4. 清理缓存并重启服务
- 清理YARN节点缓存:
yarn rmadmin -refreshNodes rm -rf /tmp/hadoop-hadoop/nm-local-dir/usercache/hadoop/appcache/* - 依次重启HDFS、YARN、HiveMetastore、HiveServer2服务,确保依赖变更生效
5. 确认配置正确性
- 检查
tez-site.xml中tez.lib.uris配置,确保指向已修正依赖的Tez包路径 - 检查
hive-site.xml中hive.execution.engine=tez,且hive.tez.container.size设置合理(避免资源不足)
内容的提问来源于stack exchange,提问作者Kaher
相关产品推荐
相关产品推荐

