Flink 提交jar,报错no class Configuration not find

博客内容描述了在使用Flink将数据sink到Hbase时遇到的错误,以及解决问题的两个步骤:配置环境变量和替换特定的jar包。重点在于Uber jar与非Uber jar的区别,作者指出Uber jar解决了问题,但未详细说明具体差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bug描述

在Flink将数据sink到Hbase里面,提交作业到flink 集群运行报错。

在这里插入图片描述

解决方案

1、刚开始是将hbase_home,hadoop_home 配置环境变量到/et/profile文件。
2、将flink-shaded-hadoop-2-uber-2.7.5-7.0.jar 放到flink/lib文件夹下面。注意这里有个坑:
就是这个jar我第一次下载的是flink-shaded-hadoop-2-2.7.5-7.0.jar这个包,就报上面的错误,后来我替换成-uber的jar包就不报错了。

疑问

带uber的jar包和不带uber的jar的区别是什么?

这个错误 `java.lang.ClassNotFoundException: org.apache.flink.api.java.typeutils.ResultTypeQueryable` 表明 **Flink 运行时无法找到 `ResultTypeQueryable` 类**,通常是由于 **依赖缺失或版本冲突** 导致的。以下是详细的解决方案: --- ### **1. 错误原因分析** #### **(1) 依赖缺失** - 项目中未正确引入 Flink 的核心依赖(如 `flink-java` 或 `flink-streaming-java`)。 - 依赖范围(scope)配置错误(如设为 `provided` 但运行时需要)。 #### **(2) 版本冲突** - 引入的 Flink 依赖版本与实际运行的 Flink 集群版本不一致。 - 项目中混用了多个不同版本的 Flink 依赖(如通过传递依赖引入)。 #### **(3) 类加载问题** - 在 Flink 集群环境中,用户代码的类加载器可能无法访问某些依赖(如 `provided` 范围的依赖未部署到集群)。 --- ### **2. 解决方案** #### **(1) 检查并添加 Flink 依赖** - **Maven 项目**:确保 `pom.xml` 中包含正确的 Flink 依赖: ```xml <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>1.17.0</version> <!-- 替换为你的 Flink 版本 --> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.12</artifactId> <version>1.17.0</version> <!-- 替换为你的 Flink 版本 --> </dependency> ``` - **Gradle 项目**: ```groovy implementation "org.apache.flink:flink-java:1.17.0" implementation "org.apache.flink:flink-streaming-java_2.12:1.17.0" ``` #### **(2) 统一依赖版本** - 使用 Maven 的 `<dependencyManagement>` 或 Gradle 的 `resolutionStrategy` 强制统一版本: ```xml <!-- Maven --> <dependencyManagement> <dependencies> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-dependencies</artifactId> <version>1.17.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` ```groovy // Gradle configurations.all { resolutionStrategy { force 'org.apache.flink:flink-java:1.17.0' force 'org.apache.flink:flink-streaming-java_2.12:1.17.0' } } ``` #### **(3) 检查依赖范围** - 如果是在本地 IDE 运行(非集群),确保依赖范围是 `compile`(默认值): ```xml <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>1.17.0</version> <scope>compile</scope> <!-- 确保不是 provided --> </dependency> ``` - 如果是提交Flink 集群运行,设为 `provided`: ```xml <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>1.17.0</version> <scope>provided</scope> </dependency> ``` #### **(4) 清理并重建项目** - **IDE 操作**: - **IntelliJ**: `File -> Invalidate Caches / Restart...`。 - **Eclipse**: `Project -> Clean...`。 - **命令行**: ```bash mvn clean install # Maven gradle clean build # Gradle ``` #### **(5) 检查类加载顺序** - 在 Flink 集群环境中,确保用户 JAR 包包含所有必要依赖(通过 `maven-assembly-plugin` 或 `maven-shade-plugin` 打包): ```xml <!-- Maven Shade 插件示例 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> </configuration> </execution> </executions> </plugin> ``` #### **(6) 验证 Flink 集群版本** - 确保本地 Flink 版本与集群版本一致: ```bash flink --version # 查看本地版本 ``` - 如果版本不一致,需对齐版本或重新编译代码。 --- ### **3. 高级调试方法** #### **(1) 查看依赖树** - 使用 Maven 检查冲突: ```bash mvn dependency:tree | grep "flink" ``` - 如果发现多个版本,通过 `<exclusions>` 排除旧版本: ```xml <dependency> <groupId>some.group</groupId> <artifactId>some-artifact</artifactId> <version>X.Y.Z</version> <exclusions> <exclusion> <groupId>org.apache.flink</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> ``` #### **(2) 手动验证类是否存在** - 解压 FlinkJAR 包,检查 `ResultTypeQueryable` 类是否存在: ```bash jar tf flink-java-1.17.0.jar | grep "ResultTypeQueryable" ``` - 如果不存在,说明依赖版本错误。 #### **(3) 本地测试** - 在本地 IDE 中运行一个简单的 Flink 程序,验证依赖是否正确: ```java public class TestFlink { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.fromElements(1, 2, 3).print(); // 测试基础功能 env.execute("Test Job"); } } ``` --- ### **4. 示例修复流程** 假设错误由版本冲突引起: 1. **检查依赖树**: ```bash mvn dependency:tree | grep "flink" ``` 输出可能显示多个版本: ``` [INFO] +- org.apache.flink:flink-java:jar:1.15.0:compile [INFO] \- org.apache.flink:flink-streaming-java_2.12:jar:1.16.0:compile ``` 2. **统一版本**: ```xml <properties> <flink.version>1.17.0</flink.version> </properties> <dependencies> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>${flink.version}</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.12</artifactId> <version>${flink.version}</version> </dependency> </dependencies> ``` 3. **清理并重建**: ```bash mvn clean install ``` --- ### **5. 总结** - **核心问题**:`ClassNotFoundException` 通常是由于依赖缺失或版本冲突。 - **关键检查点**: 1. 确保 `flink-java` 和 `flink-streaming-java` 依赖存在。 2. 统一所有 Flink 依赖的版本。 3. 根据运行环境(本地/集群)正确配置 `scope`。 - **快速解决**:清理缓存 + 统一版本 + 检查依赖范围。 如果问题仍未解决,请提供以下信息: 1. 完整的 `pom.xml` 或 `build.gradle`。 2. Flink 集群版本和运行方式(本地/YARN/Kubernetes)。 3. 完整的错误堆栈(包括 `Caused by` 部分)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值