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

Flink1.12.2集成Hive提交Yarn集群类缺失与依赖冲突问题求助

根因说明

  1. ClassNotFoundException: org.apache.hadoop.mapred.JobConf 错误是因为Flink作业提交到YARN运行时,没有加载到集群侧的Hadoop依赖包,这类依赖属于集群提供的公共依赖,不需要打入用户作业jar包。
  2. 手动引入hadoop-mapreduce-client-core后出现的NoSuchMethodError: org.apache.commons.cli.Option.builder错误是版本冲突导致:Hadoop 3.1.1传递依赖的commons-cli版本为1.2,而Flink 1.12.2要求commons-cli版本≥1.3.1才支持Option.builder方法,低版本不存在对应API。

解决方案

方案一:通过环境变量加载集群Hadoop依赖(推荐)

不需要在项目pom中额外引入Hadoop相关依赖,仅需在提交作业前配置Hadoop环境变量即可:

  1. 在提交作业的节点执行以下命令,将集群Hadoop全量依赖加入Flink运行时类路径:
export HADOOP_CLASSPATH=`hadoop classpath`
  1. 确认使用的Flink 1.12.2安装包匹配集群Hadoop版本,若使用官方无Hadoop依赖的Flink安装包,需提前将对应Hadoop版本的shaded hadoop依赖放入Flink的lib目录。
  2. 清理pom中手动添加的hadoop-mapreduce-client-core依赖,避免传递依赖冲突。

方案二:pom内引入Hadoop依赖并排除冲突包

若业务场景必须在项目中显式引入Hadoop依赖,修改依赖配置排除低版本commons-cli:

<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-mapreduce-client-core</artifactId>
  <version>${hadoop.version}</version>
  <scope>provided</scope>
  <exclusions>
    <exclusion>
      <groupId>commons-cli</groupId>
      <artifactId>commons-cli</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<!-- 显式引入Flink要求的高版本commons-cli -->
<dependency>
  <groupId>commons-cli</groupId>
  <artifactId>commons-cli</artifactId>
  <version>1.4</version>
  <scope>provided</scope>
</dependency>

提交作业前仍需配置HADOOP_CLASSPATH环境变量,保证运行时可加载到集群侧的Hadoop类。

补充优化建议

  • 所有Flink核心依赖、集群提供的Hadoop/Hive依赖都设置为provided scope,打包时不要打入作业jar包,避免重复引入导致的类冲突。
  • 如果仍有commons-cli冲突,可在maven-shade-plugin配置中添加重定向规则彻底隔离版本:
<relocation>
  <pattern>org.apache.commons.cli</pattern>
  <shadedPattern>shaded.org.apache.commons.cli</shadedPattern>
</relocation>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:36:05