Java NoClassDefFoundError : Apache Flink Complex Event Processing

Java NoClassDefFoundError : Apache Flink Complex Event Processing

我正在尝试理解 Apache Flink CEP 程序来监控数据中心的机架温度,如 Flink Official Documentation 所述。但是当我按照步骤使用 mvn clean package 创建一个 jar 并尝试使用命令

执行包时
java -cp "../cep-monitoring-1.0.jar" org.stsffap.cep.monitoring.CEPMonitoring

但是我得到以下错误,

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/flink/streaming/api/functions/source/SourceFunction
    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 sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.apache.flink.streaming.api.functions.source.SourceFunction
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

我尝试了按照 here 所述提供类路径的不同变体,但得到了相同的错误。有人可以指出我在 运行 程序中的错误吗?

提交作业到本地Flink集群:

  1. 运行弗林克。

/path/to/flink-1.4.0/bin/start-local.sh

  1. 提交作业。

/path/to/flink-1.4.0/bin/flink run -c com.package.YourClass /path/to/jar.jar

或者,您可以 运行 这份工作只需从您的 IDE:

在这种情况下,您的工作将是 运行 在 Flink 环境中。 查看 Flink 的例子:https://github.com/apache/flink/blob/master/flink-examples/flink-examples-streaming/src/main/java/org/apache/flink/streaming/examples/wordcount/WordCount.java

cep example使用flink 1.3.2版本。下面是 运行 的步骤。

  1. 安装apache flink 1.3.2版本。 (wget 它来自 here 并提取它)。
  2. cd 进入 flink-1.3.2
  3. ./bin/start-local.sh,这将启动flink集群。做 cd ...
  4. 使用 git clonecdthis repo 克隆到其中。
  5. mvn clean package 构建项目。这将创建 target 目录。
  6. 运行../flink-1.3.2/bin/flink run target/cep-monitoring-1.0.jar,开始进程。
  7. 在单独的终端中,可以像这样记录输出(假设您与上一步位于同一目录中)tail -f ../flink-1.3.2/log/flink-*-jobmanager-*.out(* 将由特定用户详细信息替换,按 Tab 键自动完成)。

这是示例输出,

rshah9@bn18-20:~/tools/cep-monitoring-master$ tail -f ../flink-1.3.2/log/flink-rshah9-jobmanager-0-bn18-20.dcs.mcnc.org.out
TemperatureWarning(9, 102.45860162626161)
TemperatureWarning(6, 113.21295716135027)
TemperatureWarning(5, 105.46064102697723)
TemperatureWarning(0, 106.44635415722034)
TemperatureWarning(4, 112.07396748089734)
TemperatureWarning(9, 114.53346561628322)
TemperatureWarning(3, 109.05305417712648)
TemperatureWarning(7, 112.3698094257147)
TemperatureWarning(3, 107.78609416982076)
TemperatureWarning(9, 107.34373990230458)
TemperatureWarning(5, 111.46480675461656)