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学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
目录
打赏
0
0
0
0
238
分享
相关文章
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
118 2
利用java8 的 CompletableFuture 优化 Flink 程序
Flink-08 Flink Java 3分钟上手 滑动窗口 SlidingWindow 时间驱动 事件驱动 TimeWindow CountWindow GlobalWindow
Flink-08 Flink Java 3分钟上手 滑动窗口 SlidingWindow 时间驱动 事件驱动 TimeWindow CountWindow GlobalWindow
131 7
Flink-07 Flink Java 3分钟上手 滚动窗口 事件驱动 Kafka TumblingWindow GlobalWindow CountWindow
Flink-07 Flink Java 3分钟上手 滚动窗口 事件驱动 Kafka TumblingWindow GlobalWindow CountWindow
74 7
|
6月前
|
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
287 4
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
165 4
Flink-09 Flink Java 3分钟上手 会话窗口 SessionWindow TimeWindow CountWindow GlobalWindow
Flink-09 Flink Java 3分钟上手 会话窗口 SessionWindow TimeWindow CountWindow GlobalWindow
81 4
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
194 3
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
78 0
Flink-06 Flink Java 3分钟上手 滚动窗口 时间驱动 Kafka TumblingWindow TimeWindowFunction TumblingProcessing
Flink-06 Flink Java 3分钟上手 滚动窗口 时间驱动 Kafka TumblingWindow TimeWindowFunction TumblingProcessing
98 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等