Flink CDC里我flink1.17写doris的代码,在idea能正常跑,但是打包报错怎么办?

Flink CDC里我flink1.17写doris的代码,在idea能正常跑,但是打包成jar包扔到flink的webui界面运行就一直报这个错怎么办?org.apache.flink.runtime.rest.handler.RestHandlerException: Could not execute application.
at org.apache.flink.runtime.webmonitor.handlers.JarRunHandler.lambda$handleRequest$1(JarRunHandler.java:114)
at java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:822)
at java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:797)
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474)
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1595)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.util.concurrent.CompletionException: org.apache.flink.util.FlinkRuntimeException: Could not execute application.
at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273)
at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280)
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1592)
... 1 more
Caused by: org.apache.flink.util.FlinkRuntimeException: Could not execute application.
at org.apache.flink.client.deployment.application.DetachedApplicationRunner.tryExecuteJobs(DetachedApplicationRunner.java:88)
at org.apache.flink.client.deployment.application.DetachedApplicationRunner.run(DetachedApplicationRunner.java:70)
at org.apache.flink.runtime.webmonitor.handlers.JarRunHandler.lambda$handleRequest$0(JarRunHandler.java:108)
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1590)
... 1 more
Caused by: org.apache.flink.client.program.ProgramInvocationException: The main method caused an error: Unable to instantiate java compiler
at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:372)
at org.apache.flink.client.program.PackagedProgram.invokeInteractiveModeForExecution(PackagedProgram.java:222)
at org.apache.flink.client.ClientUtils.executeProgram(ClientUtils.java:105)
at org.apache.flink.client.deployment.application.DetachedApplicationRunner.tryExecuteJobs(DetachedApplicationRunner.java:84)

展开
收起
小小鹿鹿鹿 2024-04-08 19:49:55 168 发布于山西 分享
分享
版权
举报
阿里云 AI 助理回答

根据您提供的错误信息和知识库中的相关资料,以下是针对问题的详细分析和解决方案:


问题分析

从错误日志来看,主要问题集中在以下几个方面: 1. org.apache.flink.runtime.rest.handler.RestHandlerException
表明在通过Flink Web UI提交JAR包运行时,Flink无法正确执行应用程序。

  1. java.util.concurrent.CompletionExceptionorg.apache.flink.util.FlinkRuntimeException
    这些异常进一步表明Flink在尝试加载或运行您的代码时遇到了问题。

  2. ProgramInvocationException: The main method caused an error: Unable to instantiate java compiler
    这是关键错误信息,表明Flink在运行时无法实例化Java编译器。这通常与以下原因有关:

    • JAR包中缺少必要的依赖。
    • 依赖冲突(例如,某些依赖未正确设置为provided作用域)。
    • Flink运行环境与本地开发环境不一致。

解决方案

1. 检查Maven依赖配置

根据知识库中的内容,为了避免JAR包依赖冲突,请确保以下几点: - Flink相关依赖的作用域设置为provided
pom.xml中,所有org.apache.flink组下的依赖(如flink-javaflink-streaming-java等)应设置为provided作用域。例如:

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-java</artifactId>
    <version>${flink.version}</version>
    <scope>provided</scope>
</dependency>

注意${flink.version}必须与Flink Web UI中选择的引擎版本一致。例如,如果Web UI中选择了vvr-8.0.9-flink-1.17,则${flink.version}应为1.17.2

  • 第三方依赖的打包方式
    如果您的代码中使用了Doris连接器或其他第三方依赖,请确保这些依赖被打包到最终的JAR文件中。可以使用Apache Maven Shade Plugin来实现Shade打包。例如:
    <build>
      <plugins>
          <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>
                  </execution>
              </executions>
          </plugin>
      </plugins>
    </build>
    

2. 确保本地开发环境与Flink运行环境一致

根据知识库中的内容,本地开发依赖的Flink版本需与Flink Web UI中选择的引擎版本保持一致。请检查以下内容: - Flink版本一致性
确保本地开发环境中使用的Flink版本与Web UI中选择的版本完全一致。例如,如果Web UI中选择了vvr-8.0.9-flink-1.17,则本地开发环境也应使用1.17.2版本。

  • JDK版本兼容性
    Flink运行环境仅支持JDK 8或JDK 11。请确保本地开发环境和Flink集群的JDK版本一致。

3. 检查Doris连接器的依赖

根据知识库中的内容,如果您的作业中使用了商业版连接器(如Doris连接器),可能会遇到类找不到的问题。解决方法如下: - 下载并添加Uber JAR包
从Maven中央仓库下载包含运行类的Uber JAR包,并将其添加到Flink运行环境中。例如,对于Doris连接器,可以从Maven仓库下载对应的uber.jar文件。

  • 配置pipeline.classpaths
    在代码中增加pipeline.classpaths配置,指定Uber JAR包的路径。例如:
    Configuration conf = new Configuration();
    conf.setString("pipeline.classpaths", "file:///path/to/doris-connector-uber.jar");
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(conf);
    

4. 检查JAR包上传和部署配置

根据知识库中的内容,在Flink Web UI中部署JAR包时,请确保以下配置正确: - JAR URI
确保上传的JAR包路径正确,并且JAR包中包含了所有必要的依赖。

  • Entry Point Class
    确保指定了正确的程序入口类。例如,如果您的主类为com.example.MyFlinkJob,则需要在Web UI中填写该类的完整路径。

  • 附加依赖文件
    如果您的作业依赖其他JAR包(如Doris连接器),可以通过“附加依赖文件”选项上传这些JAR包,并在“运行参数配置”中添加pipeline.classpaths配置。例如:

    pipeline.classpaths: 'file:///flink/usrlib/doris-connector-uber.jar'
    

5. 检查Flink运行环境的日志

如果上述步骤仍无法解决问题,建议查看Flink TaskManager的日志文件,定位具体的错误原因。日志文件通常位于Flink集群的log目录下。


总结

通过以上步骤,您可以逐步排查并解决Flink CDC写入Doris时在Web UI运行报错的问题。重点在于: 1. 确保Maven依赖配置正确,避免依赖冲突。 2. 确保本地开发环境与Flink运行环境一致。 3. 正确配置Doris连接器的依赖和运行参数。 4. 检查JAR包上传和部署配置是否正确。

如果问题仍未解决,请提供更详细的日志信息以便进一步分析。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

还有其他疑问?
咨询AI助理