Flink错误:java.lang.ClassNotFoundException:org.apache.flink.shaded.calcite.com.google.common.base.Throwables

时间:2016-12-21 12:12:54

标签: apache-flink flink-streaming

我正在使用Flink来传输csv文件中的数据。我想把它放到具有某种模式的表格格式中。为此我使用的是Flink-table_2.10-1.1.3.jar(表api),但是我得到了错误:

log4j:WARN No appenders could be found for logger (org.apache.flink.api.java.typeutils.TypeExtractor).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/flink/shaded/calcite/com/google/common/base/Throwables
    at org.apache.calcite.rel.metadata.JaninoRelMetadataProvider.create(JaninoRelMetadataProvider.java:450)
    at org.apache.calcite.rel.metadata.JaninoRelMetadataProvider.revise(JaninoRelMetadataProvider.java:460)
    at org.apache.calcite.rel.metadata.RelMetadataQuery.revise(RelMetadataQuery.java:186)
    at org.apache.calcite.rel.metadata.RelMetadataQuery.collations(RelMetadataQuery.java:484)
    at org.apache.calcite.rel.metadata.RelMdCollation.project(RelMdCollation.java:207)
    at org.apache.calcite.rel.logical.LogicalProject$1.get(LogicalProject.java:122)
    at org.apache.calcite.rel.logical.LogicalProject$1.get(LogicalProject.java:120)
    at org.apache.calcite.plan.RelTraitSet.replaceIfs(RelTraitSet.java:238)
    at org.apache.calcite.rel.logical.LogicalProject.create(LogicalProject.java:116)
    at org.apache.calcite.rel.logical.LogicalProject.create(LogicalProject.java:108)
    at org.apache.flink.api.table.plan.logical.Project.construct(operators.scala:90)
    at org.apache.flink.api.table.plan.logical.Project.construct(operators.scala:85)
    at org.apache.flink.api.table.plan.logical.LogicalNode.toRelNode(LogicalNode.scala:78)
    at org.apache.flink.api.table.Table.getRelNode(table.scala:66)
    at org.apache.flink.api.table.StreamTableEnvironment.translate(StreamTableEnvironment.scala:243)
    at org.apache.flink.api.java.table.StreamTableEnvironment.toDataStream(StreamTableEnvironment.scala:147)
    at table_streaming_test.main(table_streaming_test.java:90)
Caused by: java.lang.ClassNotFoundException: org.apache.flink.shaded.calcite.com.google.common.base.Throwables
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 17 more

当我探索相应的jar时,相应的类存在于那里。你能告诉我为什么会这样吗?

我也可以获取maven源代码,以便在我的位置构建Flink-table .jar吗?

2 个答案:

答案 0 :(得分:0)

我遇到了与CEP库相同的问题。我添加到我的pom文件但我不断收到ClassNotFoundException。我甚至通过IntelliJ将它与我的jar文件一起打包但是没有用。

  1. 如果你正在使用他们的flink-quickstart原型,我认为在pom文件中还有一些其他的东西要改变才能使它工作。当我创建一个干净的项目并自己添加flink依赖项时,我不再得到该异常了。您可以尝试查看此方法是否有效。

  2. 您还可以将flink-table JAR文件添加到Flink中的lib文件夹。这也解决了我的CEP库问题。 JAR文件在Maven存储库网站中可用。下载您想要的版本。

  3. 根据Flink网站上的Table and SQL文件:

      

    注意:Table API目前不是二进制分发的一部分。   请参阅与其链接以进行群集执行here

答案 1 :(得分:0)

我在Flink v1.4.2中也遇到了与表api相同的问题。

我将 opt 文件夹中的 flink-table_2.11-1.4.2.jar 文件添加到 lib 文件夹中,然后重新启动flink。 这适合我。希望也适合你:)