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

编译Apache Tez 0.9.2源码失败求助:适配Hadoop 3.3.6遇报错

问题描述

在CentOS 8节点集群搭建环境:

  • Hadoop版本:3.3.6
  • 计划为Hive 3.1.3配置Apache Tez 0.9.2作为执行引擎
  • Java版本:8

修改Tez源码的pom.xml中的Hadoop版本后,执行编译命令:

mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true

出现编译错误:

[ERROR] /usr/local/hadoop/apache-tez-0.9.2-src/tez-dag/src/main/java/org/apache/tez/state/StateMachineTez.java:[28,8] org.apache.tez.state.StateMachineTez is not abstract and does not override abstract method getPreviousState() in org.apache.hadoop.yarn.state.StateMachine

尝试切换到Apache Tez 0.9.0版本,依然出现方法匹配错误:

[ERROR] /usr/local/hadoop/apache-tez-0.9.0-src/tez-mapreduce/src/main/java/org/apache/tez/mapreduce/client/NotRunningJob.java:[89,29] no suitable method found for newInstance(...)
解决方案

1. 选用兼容Hadoop 3.x的Tez版本

Tez 0.9.x系列主要适配Hadoop 2.x生态,Hadoop 3.x的API有较多变化,导致编译不兼容。建议直接使用Tez 0.10.2及以上版本(如0.10.2、0.11.0),这些版本原生支持Hadoop 3.x,无需手动修改源码即可完成编译。

2. 若坚持使用Tez 0.9.x,手动修复API兼容问题

修复StateMachineTez编译错误

在tez-dag/src/main/java/org/apache/tez/state/StateMachineTez.java中,添加getPreviousState()方法的实现:

// 先在类中添加成员变量保存前状态
private STATE previousState;

// 实现父类的抽象方法
@Override
public STATE getPreviousState() {
    return previousState;
}

同时需要在状态切换的逻辑(如transition方法)中更新previousState的值。

修复NotRunningJob方法匹配错误

检查Hadoop 3.x中对应newInstance方法的参数签名变化,调整NotRunningJob.java中调用该方法的参数列表,确保参数类型、数量与Hadoop 3.x的API一致。

3. 直接使用预编译Tez包

避免手动编译的麻烦,直接下载Apache官方提供的对应Hadoop版本的预编译Tez发布包,解压后配置到Hive的环境中即可使用,无需编译源码。


内容的提问来源于stack exchange,提问作者Quok

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:32:33