问题描述
我正在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唯一支持的版本。