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

相关推荐
星空椰5 小时前
Python 面向对象高级:继承与类定义详解
开发语言·python
白露与泡影5 小时前
2026大厂Java面试题大全!牛客网最新版
java·开发语言
凯瑟琳.奥古斯特5 小时前
高阶子查询题目精炼
开发语言·数据库·python·职场和发展·数据库开发
风之所往_5 小时前
Python 3.4 新特性全面总结
python
雪度娃娃5 小时前
转向现代C++——在意为改写的函数添加 override
开发语言·c++
太阳上的雨天6 小时前
任何格式的文件转Markdown
python·ai
yaoxin5211236 小时前
419. 现代 Java IO 最佳实践 - 写入文本文件
java·windows·python
喵星人工作室7 小时前
C++火影忍者1.1.2
开发语言·c++
weixin_468466857 小时前
纳米 AI 搜索新手极速上手指南
人工智能·python·深度学习·搜索引擎·ai·语言模型·自然语言处理
凯瑟琳.奥古斯特7 小时前
数据库原理选择题精选
数据库·python·职场和发展