Flink学习指南玩转大数据Java

Flink commons-cli no such Method

2021-12-06  本文已影响0人  AlienPaul

Flink 使用介绍相关文档目录

Flink 使用介绍相关文档目录

问题描述

Flink on yarn 模式提交任务异常,解析运行参数的时候抛出NoSucnMethodError,如下图所示:

问题截图

问题排查

NoSuchMethod问题通常为依赖版本冲突问题导致。排查顺序:

  1. 检查Flink依赖的commons-cli版本。
  2. 检查hadoop classpath命令输出的classpath字符串是否有版本不同的commons-cli
  3. 检查作业jar包中是否引入了版本不同的commons-cli

先检查使用的Flink版本依赖的commons-cli版本。查看flink-parentpom.xml

<dependency>
    <groupId>commons-cli</groupId>
    <artifactId>commons-cli</artifactId>
    <version>1.5.0</version>
</dependency>

如例子中所示,可知Flink本身依赖的commons-cli版本为1.5.0。

然后排查hadoop classpath命令输出,例如:

/usr/hdp/3.0.1.0-187/hadoop/conf:/usr/hdp/3.0.1.0-187/hadoop/lib/*:/usr/hdp/3.0.1.0-187/hadoop/.//*:/usr/hdp/3.0.1.0-187/hadoop-hdfs/./:/usr/hdp/3.0.1.0-187/hadoop-hdfs/lib/*:/usr/hdp/3.0.1.0-187/hadoop-hdfs/.//*:/usr/hdp/3.0.1.0-187/hadoop-mapreduce/lib/*:/usr/hdp/3.0.1.0-187/hadoop-mapreduce/.//*:/usr/hdp/3.0.1.0-187/hadoop-yarn/./:/usr/hdp/3.0.1.0-187/hadoop-yarn/lib/*:/usr/hdp/3.0.1.0-187/hadoop-yarn/.//*:/usr/hdp/3.0.1.0-187/tez/*:/usr/hdp/3.0.1.0-187/tez/lib/*:/usr/hdp/3.0.1.0-187/tez/conf:/usr/hdp/3.0.1.0-187/tez/conf_llap:/usr/hdp/3.0.1.0-187/tez/doc:/usr/hdp/3.0.1.0-187/tez/hadoop-shim-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/hadoop-shim-2.8-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/lib:/usr/hdp/3.0.1.0-187/tez/man:/usr/hdp/3.0.1.0-187/tez/tez-api-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-common-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-dag-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-examples-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-history-parser-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-javadoc-tools-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-job-analyzer-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-mapreduce-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-protobuf-history-plugin-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-runtime-internals-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-runtime-library-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-tests-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-yarn-timeline-cache-plugin-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-yarn-timeline-history-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-yarn-timeline-history-with-acls-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/tez-yarn-timeline-history-with-fs-0.9.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/ui:/usr/hdp/3.0.1.0-187/tez/lib/async-http-client-1.9.40.jar:/usr/hdp/3.0.1.0-187/tez/lib/commons-cli-1.2.jar:/usr/hdp/3.0.1.0-187/tez/lib/commons-codec-1.4.jar:/usr/hdp/3.0.1.0-187/tez/lib/commons-collections-3.2.2.jar:/usr/hdp/3.0.1.0-187/tez/lib/commons-collections4-4.1.jar:/usr/hdp/3.0.1.0-187/tez/lib/commons-io-2.4.jar:/usr/hdp/3.0.1.0-187/tez/lib/commons-lang-2.6.jar:/usr/hdp/3.0.1.0-187/tez/lib/commons-math3-3.1.1.jar:/usr/hdp/3.0.1.0-187/tez/lib/gcs-connector-1.9.0.3.0.1.0-187-shaded.jar:/usr/hdp/3.0.1.0-187/tez/lib/guava-11.0.2.jar:/usr/hdp/3.0.1.0-187/tez/lib/hadoop-aws-3.1.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/lib/hadoop-azure-3.1.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/lib/hadoop-azure-datalake-3.1.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/lib/hadoop-hdfs-3.1.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/lib/hadoop-hdfs-client-3.1.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/lib/hadoop-mapreduce-client-common-3.1.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/lib/hadoop-mapreduce-client-core-3.1.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/lib/hadoop-yarn-server-timeline-pluginstorage-3.1.1.3.0.1.0-187.jar:/usr/hdp/3.0.1.0-187/tez/lib/jersey-client-1.19.jar:/usr/hdp/3.0.1.0-187/tez/lib/jersey-json-1.19.jar:/usr/hdp/3.0.1.0-187/tez/lib/jettison-1.3.4.jar:/usr/hdp/3.0.1.0-187/tez/lib/jetty-server-9.3.22.v20171030.jar:/usr/hdp/3.0.1.0-187/tez/lib/jetty-util-9.3.22.v20171030.jar:/usr/hdp/3.0.1.0-187/tez/lib/jsr305-3.0.0.jar:/usr/hdp/3.0.1.0-187/tez/lib/metrics-core-3.1.0.jar:/usr/hdp/3.0.1.0-187/tez/lib/protobuf-java-2.5.0.jar:/usr/hdp/3.0.1.0-187/tez/lib/RoaringBitmap-0.4.9.jar:/usr/hdp/3.0.1.0-187/tez/lib/servlet-api-2.5.jar:/usr/hdp/3.0.1.0-187/tez/lib/slf4j-api-1.7.10.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-action-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-admin-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-agent-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-client-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-common-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-engine-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-hadoop-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-hadoop-3.1-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-hadoop-client-3.1-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-hadoop-common-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-inputstream-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-metastore-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-metrics-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-rule-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-server-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-zeppelin-interpreter-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-zeppelin-server-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/smart-zeppelin-zengine-1.6.0-SNAPSHOT.jar:/usr/hdp/3.0.1.0-187/tez/lib/tez.tar.gz

这里面我们发现tez引入了commons-cli包,版本为1.2,可能存在冲突。需要进一步检查是否是版本差异导致对应class没有所需的方法。

最后检查job项目的依赖。在作业项目目录执行:

mvn dependency:tree

检查是否有commons-cli依赖,以及它的版本。如果有,需要exclude掉这个依赖。

Flink作业项目如果用到命令行解析,不建议使用commons-cli。建议使用Flink自带的ParameterTool。使用方法参见Handling Application Parameters | Apache Flink,或者本人博客Flink 使用之 ParameterTool

上一篇 下一篇

猜你喜欢

热点阅读