在Debian中使用JDK 9非法创建StreamTableEnvironment

问题描述

我正在Flink 1.11应用程序中创建一个StreamTableEnvironment,该方法在Windows中有效,但是随后,当我尝试在Jbian9中(与Windows中相同版本)在Debian中部署mi jar时,抛出此错误:>

Exception in thread "main" java.lang.ExceptionInInitializerError
        at org.apache.flink.table.planner.calcite.FlinkRelFactories$.<init>(FlinkRelFactories.scala:51)
        at org.apache.flink.table.planner.calcite.FlinkRelFactories$.<clinit>(FlinkRelFactories.scala)
        at org.apache.flink.table.planner.calcite.FlinkRelFactories.FLINK_REL_BUILDER(FlinkRelFactories.scala)
        at org.apache.flink.table.planner.delegation.PlannerContext.lambda$getsqlToRelConverterConfig$2(PlannerContext.java:279)
        at java.util.Optional.orElseGet(java.base@9-internal/Optional.java:344)
        at org.apache.flink.table.planner.delegation.PlannerContext.getsqlToRelConverterConfig(PlannerContext.java:273)
        at org.apache.flink.table.planner.delegation.PlannerContext.createFrameworkConfig(PlannerContext.java:137)
        at org.apache.flink.table.planner.delegation.PlannerContext.<init>(PlannerContext.java:113)
        at org.apache.flink.table.planner.delegation.PlannerBase.<init>(PlannerBase.scala:112)
        at org.apache.flink.table.planner.delegation.StreamPlanner.<init>(StreamPlanner.scala:48)
        at org.apache.flink.table.planner.delegation.BlinkPlannerFactory.create(BlinkPlannerFactory.java:50)
        at org.apache.flink.table.api.bridge.java.internal.StreamTableEnvironmentImpl.create(StreamTableEnvironmentImpl.java:130)
        at org.apache.flink.table.api.bridge.java.StreamTableEnvironment.create(StreamTableEnvironment.java:111)
        at org.apache.flink.table.api.bridge.java.StreamTableEnvironment.create(StreamTableEnvironment.java:82)
        at com.teavaro.cep.modules.ml.CEPMLInit.runUseCase(CEPMLInit.java:57)
        at com.teavaro.cep.modules.ml.CEPMLInit.start(CEPMLInit.java:43)
        at com.teavaro.cep.modules.ml.CEPMLInit.prepareUseCase(CEPMLInit.java:35)
        at com.teavaro.cep.pipelines.CEPInit.start(CEPInit.java:47)
        at com.teavaro.cep.StreamingJob.runcEP(StreamingJob.java:121)
        at com.teavaro.cep.StreamingJob.prepareJob(StreamingJob.java:106)
        at com.teavaro.cep.StreamingJob.main(StreamingJob.java:64)
Caused by: java.lang.RuntimeException: while binding method public default org.apache.calcite.tools.RelBuilder$ConfigBuilder org.apache.calcite.tools.RelBuilder$Config.toBuilder()
        at org.apache.calcite.util.ImmutableBeans.create(ImmutableBeans.java:215)
        at org.apache.calcite.tools.RelBuilder$Config.<clinit>(RelBuilder.java:3074)
        ... 21 more
Caused by: java.lang.illegalaccessexception: access to public member Failed: org.apache.calcite.tools.RelBuilder$Config.toBuilder()ConfigBuilder/invokeSpecial,from org.apache.calcite.tools.RelBuilder$Config/2 (unnamed module @2cc03cd1)
        at java.lang.invoke.MemberName.makeAccessException(java.base@9-internal/MemberName.java:908)
        at java.lang.invoke.MethodHandles$Lookup.checkAccess(java.base@9-internal/MethodHandles.java:1839)
        at java.lang.invoke.MethodHandles$Lookup.checkMethod(java.base@9-internal/MethodHandles.java:1779)
        at java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(java.base@9-internal/MethodHandles.java:1928)
        at java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(java.base@9-internal/MethodHandles.java:1922)
        at java.lang.invoke.MethodHandles$Lookup.unreflectSpecial(java.base@9-internal/MethodHandles.java:1480)
        at org.apache.calcite.util.ImmutableBeans.create(ImmutableBeans.java:213)

这就是我使用StreamTableEnvironment的方式:

 StreamTableEnvironment tableEnv = StreamTableEnvironment.create(StreamingJob.env);
            tableEnv.getConfig().getConfiguration().setString("python.files",PropertyFileReader.getPythonFiles());
            tableEnv.getConfig().getConfiguration().setString("python.client.executable",PropertyFileReader.getPythonClientExecutable());
            tableEnv.getConfig().getConfiguration().setString("python.executable",PropertyFileReader.getPythonExecutable());
            tableEnv.getConfig().getConfiguration().setString("taskmanager.memory.task.off-heap.size","79mb");
            // Registering Python UDF
            tableEnv.executesql("CREATE TEMPORARY SYstem FUNCTION Inference AS '" + PropertyFileReader.getPythonInferenceFunction() + "' LANGUAGE PYTHON");

此行出现错误 StreamTableEnvironment tableEnv = StreamTableEnvironment.create(StreamingJob.env);

我在使用Flink 1.11和

<dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table-planner-blink_2.11</artifactId>
            <version>${flink.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-python_2.11</artifactId>
            <version>${flink.version}</version>
        </dependency>

解决方法

Flink不支持Java9。此外,Java 9的生命周期已结束,并且在任何生产用例中都不支持。

请切换到Java 8或11,这是Flink唯一支持的版本。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...