首页 > 解决方案 > flink 使用流 sql 查询上传作业时的问题

问题描述

我使用了最新的 flink 版本(1.10.0)和 sbt(1.3.7)。使用流式 sql 查询上传作业时出现此异常:

原因:java.lang.ClassCastException: org.codehaus.janino.CompilerFactory 不能在 org.codehaus.commons.compiler.CompilerFactoryFactory.getCompilerFactory(CompilerFactoryFactory.java:129) 的 org.codehaus.commons.compiler.CompilerFactory. .codehaus.commons.compiler.CompilerFactoryFactory.getDefaultCompilerFactory(CompilerFactoryFactory.java:79) at org.apache.calcite.rel.metadata.JaninoRelMetadataProvider.compile(JaninoRelMetadataProvider.java:432)

当我使用sbt run运行主类时,它运行良好。我使用sbt 汇编命令制作了 jar,但库之间存在冲突。出于这个原因,在 build.sbt 中添加:

assemblyMergeStrategy in assembly := {
     case PathList("META-INF", xs @ _*) => MergeStrategy.discard
     case x => MergeStrategy.first
    }

我用 hive 连接器https://issues.apache.org/jira/browse/FLINK-14849阅读了一个类似的案例,这就是答案:

https://issues.apache.org/jira/browse/FLINK-13749之后,flink-client 将使用默认的 child-first resolve-order。如果用户 jar 有一些冲突依赖,就会出现一些问题。

我的问题是:如何解决这些冲突?对于这种情况,有什么程序集合并策略建议吗?帮助将不胜感激。

标签: sbtapache-flinkflink-streamingflink-sql

解决方案


我有同样的问题。也许你已经用 打包了你的代码flink-table-planner_${scala.binary.version},所以你需要用这些设置来改变你的 maven 配置:

    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-planner_${scala.binary.version}</artifactId>
        <version>${flink.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-planner-blink_${scala.binary.version}</artifactId>
        <version>${flink.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-planner_${scala.binary.version}</artifactId>
        <version>${flink.version}</version>
        <scope>provided</scope>
    </dependency>

推荐阅读