解决Flink中ApacheCommonsCLI版本冲突

flink集群运行checkpoint报错: org.apache.commons.cl i.CommandLine.hasOption(Lorg/apache/commons/cli/ Option;)Z

这个错误通常是由于 Apache Commons CLI 依赖版本冲突引起的。以下是详细的解决步骤:

问题原因

  1. 版本冲突 :Flink 运行时加载了不兼容的 commons-cli 依赖版本
  2. 依赖污染 :用户应用程序或某个依赖引入了冲突的 commons-cli 版本
  3. 类加载问题 :不同版本的 commons-cli 被多个类加载器加载

解决方法

在 Flink 的 lib 目录下检查是否存在多个 commons-cli 版本:

bash 复制代码
ls $FLINK_HOME/lib | grep commons-cli

如果存在多个版本(如 commons-cli-1.3.jarcommons-cli-1.4.jar),删除较旧版本,仅保留一个与 Flink 兼容的版本(推荐使用 Flink 官方发行版默认携带的版本)。

2. 排除用户依赖冲突

若应用程序通过 Maven 引入冲突依赖:

XML 复制代码
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-streaming-java</artifactId>
    <version>${flink.version}</version>
    <exclusions>
        <exclusion>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
        </exclusion>
    </exclusions>
</dependency>
3. 强制统一版本(Maven)

pom.xml 中显式指定版本:

XML 复制代码
<properties>
    <commons-cli.version>1.4.0</commons-cli.version>
</properties>

<dependency>
    <groupId>commons-cli</groupId>
    <artifactId>commons-cli</artifactId>
    <version>${commons-cli.version}</version>
</dependency>
4. Hadoop 环境特殊处理

若使用 Flink on YARN,在 flink-conf.yaml 添加:

yaml 复制代码
classloader.parent-first-patterns.additional: org.apache.commons.cli
5. 验证修复

重新启动集群后检查类加载:

java 复制代码
System.out.println(CommandLine.class.getProtectionDomain().getCodeSource().getLocation());

临时解决方案

在作业提交命令中添加显式排除:

bash 复制代码
flink run -c com.example.MainJob \
    -ytj $FLINK_HOME/lib/commons-cli-1.4.0.jar \
    your-job.jar

注意:建议优先采用方法1或2,彻底解决依赖冲突问题。若在云环境(如 EMR)遇到此问题,需联系平台方确认兼容版本。

相关推荐
Boilermaker199217 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
沈浩(种子思维作者)17 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
MM_MS18 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
꧁Q༒ོγ꧂18 小时前
LaTeX 语法入门指南
开发语言·latex
njsgcs18 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_9918 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
io_T_T18 小时前
迭代器 iteration、iter 与 多线程 concurrent 交叉实践(详细)
python
古城小栈18 小时前
Rust 迭代器产出的引用层数——分水岭
开发语言·rust
华研前沿标杆游学18 小时前
2026年走进洛阳格力工厂参观游学
python
Carl_奕然19 小时前
【数据挖掘】数据挖掘必会技能之:A/B测试
人工智能·python·数据挖掘·数据分析