无法在Flink仪表板版本1.3.2中执行由ClassNotFoundException引起的CEP模式

时间:2017-10-28 22:00:47

标签: apache-flink flink-streaming flink-cep

我写了一个像这样的简单模式

   Pattern<JoinedEvent, ?> pattern = Pattern.<JoinedEvent>begin("start")
            .where(new SimpleCondition<JoinedEvent>() {
     @Override
     public boolean filter(JoinedEvent streamEvent) throws Exception {

            return streamEvent.getRRInterval()>= 10 ;
                        }
             }).within(Time.milliseconds(WindowLength));

并且它在IntellijIdea中执行良好。我在仪表板和IntelliJ-Idea中都使用Flink 1.3.2。当我从源代码构建Flink时,我看到很多警告消息让我相信迭代条件类没有被包含在jar中,因为错误也说ClassNotFoundException。以下是错误

Caused by: java.lang.NoClassDefFoundError: org/apache/flink/cep/pattern/conditions/IterativeCondition
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at 

org.apache.flink.client.program.PackagedProgram.hasMainMethod(PackagedProgram.java:492)
    ... 38 more
Caused by: java.lang.ClassNotFoundException: org.apache.flink.cep.pattern.conditions.IterativeCondition
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 44 more

2 个答案:

答案 0 :(得分:0)

经过一整天的努力来解决这个问题,最后,我得到了解决方案。问题非常基本,即Flink CEP不是二进制分发的一部分,因此每当我尝试执行模式时,它都会给我一个错误。

解决方案很简单

enter image description here

正如你所看到的,Flink Binary没有cep jar。

所以在你的IDE中使用IntelliJ,然后复制所需的jar

enter image description here

转到此位置并将此jar文件复制粘贴到二进制版本的lib文件夹中。

Yalaa,问题解决了

答案 1 :(得分:0)

如果你不想手动添加依赖项或者你有maven或sbt项目,你可以简单地在.pom文件或相应的sbt文件中添加依赖项并添加以下依赖项。

根据您的项目需求更改flink版本。

<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-cep_2.11 -->
<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-cep_2.11</artifactId>
  <version>1.3.2</version>
</dependency>


// https://mvnrepository.com/artifact/org.apache.flink/flink-cep_2.11
libraryDependencies += "org.apache.flink" % "flink-cep_2.11" % "1.3.2"