스트리밍 테이블 API 쿼리가있어서 table.writetoSink(sink)
메서드를 사용하여 Table
을 .csv
파일에 씁니다.Flink : Table API 쿼리를 실행할 때 NoClassDefFoundError
프로그램을 실행할 때 다음 오류가 발생합니다.
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 파일이 포함되어 있습니다.
감사합니다. Fabian, 내 프로젝트에 commons-compiler jar를 포함 시켰지만 다음 오류로 이어집니다. – kadsank
'예외 "main"java.lang.IllegalStateException : Java 컴파일러를 인스턴스화 할 수 없습니다. "원인 : java. lang.ClassNotFoundException : org.codehaus.commons.compiler의 어떠한 구현은 클래스 경로 org.codehaus.commons.compiler.CompilerFactoryFactory.getDefaultCompilerFactory에서 \t (CompilerFactoryFactory.java:58)에없는 org.apache.calcite.rel에서 \t .metadata.JaninoRelMetadataProvider.compile (JaninoRelMetadataProvider.java:415)' – kadsank
아마도 여러분의 버전은 Calcite가 기대하는 버전과 호환되지 않을 수 있습니다. 그러나 전이 의존성을 명시 적으로 포함 할 필요는 없습니다. 'flink-table'을 포함하고 모든 의존성을 지닌 팻 단지를 만드는 것만으로 충분합니다. –