【实时计算】Storm集群IDEA打包上传失败: 类文件具有错误的版本 61.0, 应为 52.0
本次错误发生背景为做基于 Storm 的股票数据流处理实验,此前已经完成 Zookeeper 集群(3 节点)、Kafka 集群(3 节点)、Storm 集群(3 个 Nimbus 节点、3 个 Supervisor 节点、1 个 UI 节点)的搭建与部署。同时在 IDEA 中编写了核心类:WriteTopology(用于将 CSV 股票数据写入 Kafka,DataSourceSpout2读取 CSV等,完成代码打包后在提交拓扑时,遇到了报错,为了解决这个问题花费了好久时间,所以打算记录一下:
类文件具有错误的版本 61.0, 应为 52.0。

这个错误的核心原因是 Storm 版本与本地 JDK 版本不兼容:我本地使用的是 JDK 1.8(对应类文件版本 52.0),但使用的 Storm 2.8.2是用 Java 17 编译的(对应类文件版本 61.0),低版本 JDK 无法解析高版本编译的类文件。

为了解决这个问题,需要将Storm 版本降级到 支持 Java 8 的Storm 2.4.0版本,将 pom.xml 中所有 Storm 相关依赖的版本从 2.8.2 改为 2.4:此时我们尝试去提交拓扑,又提示找不到主类:
Error: Could not find or load main class org.example.kafka_storm2.WriteTopology Caused by: java.lang.ClassNotFoundException: org.example.kafka_storm2.WriteTopology

这个错误的核心原因是 Storm 容器内的版本与拓扑依赖的 Storm 版本不兼容,因为我们在使用storm-compose.yml拉取镜像的时候,默认拉取的是2.8.0的版本,我们需要修改 storm-compose.yml,将所有 Storm 服务的镜像版本指定为 storm:2.4.0:

然后进入容器,重启storm集群,再次尝试打包:
docker-compose -f ./storm-compose.yml down
docker-compose -f ./storm-compose.yml up -d
这样就可以顺利解决找不到主类的问题了。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)