Flink BucketingSink崩溃报NoClassDefFoundError异常求助(1.4.x版本)
解决Flink 1.4.x中BucketingSink触发的NoClassDefFoundError问题
这个问题我在使用Flink早期版本时也踩过坑,核心原因很明确:BucketingSink是基于Hadoop文件系统组件实现的,但你的项目没有引入对应的Hadoop依赖包,导致运行时找不到org.apache.hadoop.fs.FileSystem这个类。
具体解决方案
根据你的项目构建工具,添加对应依赖即可:
1. Maven项目
在pom.xml中加入以下依赖(注意和你的Flink版本匹配,这里以1.4.2为例):
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-hadoop-compatibility_2.11</artifactId> <version>1.4.2</version> <!-- 本地IDE运行时请去掉这个scope;如果是提交到已配置Hadoop的集群,可保留<scope>provided</scope>避免包冲突 --> </dependency>
如果你的项目用的是Scala 2.10,把_2.11替换成_2.10即可。
2. Gradle项目
在build.gradle中添加依赖:
dependencies { // 本地运行用implementation,集群运行可换成compileOnly implementation 'org.apache.flink:flink-hadoop-compatibility_2.11:1.4.2' }
3. 手动添加依赖包
如果不用构建工具,可以从Flink官方资源包中下载对应版本的flink-hadoop-compatibility jar包,直接放到项目的classpath目录下。
额外提醒
- 本地IDE调试时,千万别把依赖范围设为
provided,否则IDE不会将依赖包加入运行环境; - 若提交到已经配置好Hadoop环境的Flink集群运行,集群本身自带Hadoop相关依赖,这时候设置
provided范围可以避免不必要的包冲突。
内容的提问来源于stack exchange,提问作者Josh Lemer
相关产品推荐
相关产品推荐

