flink 1.9.0 编译:flink-fs-hadoop-shaded 找不到
·
Flink 1.9.0 编译时找不到 flink-fs-hadoop-shaded 的解决方案
问题背景
在编译 Apache Flink 1.9.0 版本时,可能会遇到 flink-fs-hadoop-shaded 模块找不到的问题。这个模块是 Flink 与 Hadoop 文件系统集成的关键组件,用于提供对 HDFS 等分布式文件系统的支持。
问题原因
- 依赖管理问题:Flink 1.9.0 的构建系统可能没有正确处理这个模块的依赖关系
- Maven 仓库缺失:该模块的 artifact 可能没有正确发布到 Maven 中央仓库
- 构建配置问题:编译时的 profile 或参数设置不当
解决方案
方法一:使用预构建的二进制包
最简单的解决方案是直接从 Flink 官网下载预编译的二进制包:
wget https://archive.apache.org/dist/flink/flink-1.9.0/flink-1.9.0-bin-scala_2.11.tgz
方法二:从源码正确编译
如果需要从源码编译,请按照以下步骤操作:
- 确保安装了必要的构建工具:
# 安装 JDK 8
sudo apt-get install openjdk-8-jdk
# 安装 Maven 3.3.9+
sudo apt-get install maven
- 克隆 Flink 源码并切换到 1.9.0 分支:
git clone https://github.com/apache/flink.git
cd flink
git checkout release-1.9.0
- 使用正确的 profile 进行编译:
mvn clean install -DskipTests -Dhadoop.version=2.8.5 -Dinclude-hadoop
方法三:手动添加依赖
如果还是找不到该模块,可以尝试手动添加依赖到你的项目中:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-fs-hadoop-shaded</artifactId>
<version>1.9.0</version>
</dependency>
注意事项
-
Hadoop 版本兼容性
Flink 1.9.0 对 Hadoop 版本有严格要求,建议使用 Hadoop 2.8.5 以获得最佳兼容性。其他版本(如 Hadoop 3.x)可能存在 API 不兼容或运行时错误。- 验证方法:通过
hadoop version命令检查当前安装的 Hadoop 版本。 - 常见问题:若使用错误版本,可能报错
ClassNotFoundException或NoSuchMethodError。
- 验证方法:通过
-
Maven 环境配置
- 镜像设置:在
settings.xml中配置国内镜像(如阿里云)以加速依赖下载:<mirror> <id>aliyun</id> <name>Aliyun Maven Mirror</name> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>central</mirrorOf> </mirror> - 依赖仓库:确保包含 Flink 官方仓库:
<repository> <id>apache.snapshots</id> <url>https://repository.apache.org/snapshots/</url> <releases><enabled>false</enabled></releases> </repository>
- 镜像设置:在
-
IDE 编译指南
- IntelliJ IDEA:需通过
File > New > Project from Existing Sources导入项目,并勾选Import Maven projects automatically。 - Eclipse:使用
Import > Maven > Existing Maven Projects,完成后右键项目选择Update Project。
- IntelliJ IDEA:需通过
替代方案
-
升级 Flink 版本
- 推荐版本:Flink 1.13+ 修复了早期版本的许多兼容性问题,且支持更广泛的 Hadoop 版本(如 3.1.1)。
- 迁移步骤:
- 修改
pom.xml中的 Flink 依赖版本。 - 检查 API 变更(如废弃的类需替换为新 API)。
- 修改
-
使用 Docker 镜像
- 官方镜像:直接运行预配置的 Flink 环境:
docker run -it apache/flink:1.9.0-scala_2.12 bash - 自定义镜像:基于
flink:1.9.0扩展,添加 Hadoop 依赖:FROM apache/flink:1.9.0 RUN apt-get update && apt-get install -y hadoop-2.8.5
- 官方镜像:直接运行预配置的 Flink 环境:
-
社区支持
- 论坛:在 Apache Flink 邮件列表 中描述问题,附上错误日志和复现步骤。
- Issue Tracker:在 JIRA 提交 Bug 报告时,需注明:
- Flink/Hadoop 版本
- 完整的堆栈跟踪
- 最小化复现代码
扩展场景示例
场景:Hadoop 版本冲突
若环境中已安装 Hadoop 3.x,可通过以下方式隔离依赖:
- 在 Flink 的
lib目录下手动放置 Hadoop 2.8.5 的 JAR 文件(如hadoop-common-2.8.5.jar)。 - 设置
HADOOP_CLASSPATH环境变量指向 2.8.5 的库路径。
示例命令:
export HADOOP_CLASSPATH=/path/to/hadoop-2.8.5/share/hadoop/common/*
./bin/start-cluster.sh

更多推荐



所有评论(0)