在 debian 中使用 JDK 9 非法访问创建 StreamTableEnvironment

Illegal access to create StreamTableEnvironment with JDK 9 in debian

我正在我的 Flink 1.11 应用程序中创建一个 StreamTableEnvironment,这在 Windows 中有效,但是,当我尝试在 Debian 中使用 JDK9 部署 mi jar 时([=23 中的相同版本) =]) 它抛出这个错误:

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(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 不支持 Java 9。此外 Java 9 已停产,不支持任何生产用例。

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