Flink - NoSuchMethodError: com.twitter.chill.java.Java8ClosureRegistrar.areOnJava8()Z

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 使用 Flink 1.13.1 + scala 2.11.12 的组合进行 Flink 本地测试是,报错.NoSuchMethodError: com.twitter.chill.java.Java8ClosureRegistrar.areOnJava8()Z,经过前面多次的 noSuchMethod 的折磨,现在已经轻车熟路,直接开始排查。...............

一.引言

使用 Flink 1.13.1 + scala 2.11.12 的组合进行 Flink 本地测试是,报错 .NoSuchMethodError: com.twitter.chill.java.Java8ClosureRegistrar.areOnJava8()Z,经过前面多次的 noSuchMethod 的折磨,现在已经轻车熟路,直接开始排查。

二.错误分析

1.字面含义

image.gif编辑

报错显示 com.twiter.chill.java.Java8ClosureRegistrar 类没有 areOnJava8()Z 这个方法,这个 Z 代表该函数返回值为 boolean,这里再顺便回顾下不同字符代表的函数返回值:

Z boolean
B byte
C char
S short
I int
J long
F float
D double
L fully-qualified-class fully-qualified-class
[ type type[]
( arg-types ) ret-type method type
<init> 构造方法
<cinit> 静态类初始化代码

2.深度分析

def isJavaLambda(klass: Class[_]): Boolean =
    Java8ClosureRegistrar.areOnJava8 && klass.getName().indexOf('/') >= 0

image.gif

既然没有 areOnJava8()Z 这个方法,我们首要的任务就是找到这个该方法所在类 Java8ClosureRegistrar 一看究竟,IDEA 可以快捷搜索直接锁定,可以看到项目内只要一个 Java8ClosureRegistrar.class,所以这里基本排除依赖冲突的问题,大概率是高低版本导致。

image.gif编辑

如果不是 IDEA,也可以到 maven 库按照字符排序快速搜查:

image.gif编辑

查看 0.9.3 版本的 com.twitter.chill 的 Java8ClosureRegistrar 类,果然没有 areOnJava8()Z,由于我是用的 Flink 版本相对较高,所以大概率匹配了更高版本的 com.twitter.chill,直接进入 maven 库查找高版本 com.twitter.chill:

image.gif编辑

博主使用 scala 2.11,最新的 0.10.0 支持 2.11,所以直接尝试最新的:

image.gif编辑

3.问题解决

<!-- https://mvnrepository.com/artifact/com.twitter/chill -->
<dependency>
    <groupId>com.twitter</groupId>
    <artifactId>chill_2.13</artifactId>
    <version>0.10.0</version>
</dependency>

image.gif

根据 maven 加载依赖的先后顺序,这里直接将新版本依赖加到 dependencies 的首位。在 maven 选项下执行 reload.Project:

image.gif编辑

reload 后任务执行正常:

image.gif编辑

三.总结

image.gif编辑

更新了 0.10.0 版本后,再次查看 Java8ClosureRegistrar 方法,发现依然没有 areOnJava8()Z 的方法,翻了下 GITHUB 上大神的解释:

no such method error is a binary incompatibility problem. You seem to have 
incorrect versions of chill on the classpath.This happens when you have two dependencies that use different versions and the wrong one gets selected.
I don't think we can fix this in the library itself. Please reopen if you 
feel this is a bug we can fix.

image.gif

大致翻译了一下:

no such method error 是二进制不兼容问题。您似乎在类路径上有不正确的 chill 版本。
当您有两个使用不同版本的依赖项并且选择了错误的依赖项时,就会发生这种情况。
我不认为我们可以在 library 本身解决这个问题。

image.gif

也是似懂非懂的,可能 areOnJava8()Z 就是验证 java 环境的隐函数吧,有了解的童鞋欢迎科普。总的来说,上面这个错误大致分为两种情况:A.版本过低 B.依赖冲突。

最后铺一下博主这两年遇到的 NoSuchMethod 的坑,有需要的大家也可以看一下解决过程,noSuchMethod 这个错误很痛苦,但是解决了很爽:

Spark : local 模式 org.apache.hadoop.conf.Configuration.getPassword(Ljava/lang/String;)[C

Spark: java.lang.NoSuchMethodError: com.alibaba.fastjson.JSONObject.getOrDefault

Java- MR 读写 orc 之 NoSuchMethodError: hive.ql.exec.vector.VectorizedRowBatch.getMaxSize

Spark - ml.dmlc.xgboost4j / spark 版本匹配与 NoSuchMethodError 解决

除此之外,大数据常见异常解决 专栏里还有很多大数据相关的异常与对应解决方法,有兴趣的童鞋可以移步。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
目录
相关文章
|
3月前
|
Oracle NoSQL 关系型数据库
实时计算 Flink版操作报错之报错:java.lang.ClassNotFoundException: io.debezium.connector.common.RelationalBaseSourceConnector,如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1天前
|
SQL Java Apache
实时计算 Flink版操作报错合集之使用parquet时,怎么解决报错:无法访问到java.uti.Arrays$ArrayList类的私有字段
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
消息中间件 Kafka 数据处理
实时计算 Flink版操作报错合集之使用kafka connector时,报错:java.lang.ClassNotFoundException,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
Java 关系型数据库 数据库
实时计算 Flink版操作报错合集之拉取全量数据时,如何解决Checkpoint失败并且报错为 "java.lang.OutOfMemoryError: Java heap space"
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
Java Scala 流计算
实时计算 Flink版产品使用问题之Docker镜像中的Java路径和容器内的Java路径不一致,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
SQL Java 数据处理
实时计算 Flink版产品使用问题之使用MavenShadePlugin进行relocation并遇到只包含了Java代码而未包含Scala代码,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
消息中间件 Java Kafka
Java中的流处理框架:Kafka Streams与Flink
Java中的流处理框架:Kafka Streams与Flink
|
2月前
|
消息中间件 Java Kafka
实时计算 Flink版操作报错合集之从hudi读数据,报错NoSuchMethodError:org.apache.hudi.format.cow.vector.reader.PaequetColumnarRowSplit.getRecord(),该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2月前
|
资源调度 关系型数据库 MySQL
实时计算 Flink版操作报错合集之遇到如下报错:java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
3月前
|
SQL Java 数据处理
实时计算 Flink版产品使用合集之在生产运行方式中是嵌入java代码还是在客户端
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。