Flink:运行Table API查询时的NoClassDefFoundError

时间:2016-12-20 09:32:10

标签: java apache-flink flink-streaming

我有一个流式表API查询,并希望使用Table方法将生成的.csv写入table.writetoSink(sink)文件。

当我运行程序时,我收到以下错误。

Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/commons/compiler/CompileException
at org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:580)
at org.apache.flink.api.table.FlinkPlannerImpl.rel(FlinkPlannerImpl.scala:102)
at org.apache.flink.api.table.BatchTableEnvironment.sql(BatchTableEnvironment.scala:132)
at table_streaming_test.main(table_streaming_test.java:59)
Caused by: java.lang.ClassNotFoundException: org.codehaus.commons.compiler.CompileException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 4 more

我还在项目中包含了commons-compiler.jar文件。

1 个答案:

答案 0 :(得分:0)

Flink的Table和SQL API构建于Apache Calcite之上,取决于来自commons-compiler的{​​{1}}。

错误消息表明您的应用程序中不包含org.codehaus.janino依赖项。一种方法是构建一个包含应用程序所有依赖项的胖jar。 Flink的快速启动Maven architypes(JavaScala)为此提供了蓝图。另一种方法是将所有必需的依赖项添加到Flink设置的commons-compiler文件夹中。