Flink commons-cli no such Method
2021-12-06 本文已影响0人
AlienPaul
Flink 使用介绍相关文档目录
问题描述
Flink on yarn 模式提交任务异常,解析运行参数的时候抛出NoSucnMethodError
,如下图所示:

问题排查
NoSuchMethod
问题通常为依赖版本冲突问题导致。排查顺序:
- 检查Flink依赖的
commons-cli
版本。 - 检查
hadoop classpath
命令输出的classpath
字符串是否有版本不同的commons-cli
。 - 检查作业jar包中是否引入了版本不同的
commons-cli
。
先检查使用的Flink版本依赖的commons-cli
版本。查看flink-parent
的pom.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。