解决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)遇到此问题,需联系平台方确认兼容版本。

相关推荐
alvin_20051 分钟前
python之OpenGL应用(二)Hello Triangle
python·opengl
机器视觉的发动机6 分钟前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
铁蛋AI编程实战9 分钟前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
HyperAI超神经14 分钟前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
jiang_changsheng21 分钟前
RTX 2080 Ti魔改22GB显卡的最优解ComfyUI教程
python·comfyui
R_.L24 分钟前
【QT】常用控件(按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)
开发语言·qt
Zach_yuan33 分钟前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络
云姜.38 分钟前
java多态
java·开发语言·c++
CoderCodingNo1 小时前
【GESP】C++五级练习题 luogu-P1865 A % B Problem
开发语言·c++·算法
陳10301 小时前
C++:红黑树
开发语言·c++