spring boot集成通过api调用启动任务,在Flink用idea调用是正常的 但是发布到linux就报这个错,怎么解决?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您描述的问题,Spring Boot 集成通过 API 调用启动 Flink 任务时,在 IDEA 中运行正常,但在 Linux 环境下报错。这种问题通常与依赖冲突、环境配置差异或类加载顺序相关。以下是详细的排查和解决方案:
在 Linux 环境下运行时,可能会因为依赖冲突导致类加载失败或方法找不到等问题。以下是具体排查步骤:
mvn dependency:tree
命令查看项目的依赖树,检查是否存在重复或冲突的依赖。flink-streaming-java
、flink-connector-kafka
等)。hadoop-common
)。log4j
或 slf4j
)。scope
设置为 provided
,避免将其打包到最终的 JAR 文件中。例如:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.11</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>
exclusions
排除不必要的依赖。例如:
<dependency>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
</exclusion>
</exclusions>
</dependency>
Linux 环境下的类加载顺序可能与 IDEA 不同,导致某些类冲突或加载失败。以下是解决方法:
jar tf your-jar-file.jar
查看生成的 JAR 包内容,确认是否存在重复的类文件(如 org.codehaus.janino.CompilerFactory
)。classloader.parent-first-patterns.additional
参数解决。例如:
classloader.parent-first-patterns.additional: org.codehaus.janino
将该参数添加到 Flink 作业的运行参数中。
log4j
),可以使用 maven-shade-plugin
对冲突的类进行重定位(relocation)。例如:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<relocations>
<relocation>
<pattern>org.codehaus.janino</pattern>
<shadedPattern>com.shaded.org.codehaus.janino</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
IDEA 和 Linux 环境可能存在配置差异,导致运行结果不一致。以下是需要检查的内容:
-D
参数(如 DNS 配置、日志路径等)。env.java.opts
参数。例如:
env.java.opts: >-
-Dsun.net.spi.nameservice.provider.1=default
-Dsun.net.spi.nameservice.provider.2=dns,sun
-Dsun.net.spi.nameservice.nameservers=192.168.0.1
libgomp
、libstdc++
等)。如果上述方法未能解决问题,请根据具体的错误信息进一步排查:
log.level: DEBUG
如果问题仍未解决,请提供具体的错误日志,以便进一步分析和定位问题。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。