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集群:
- 运行弗林克。
/path/to/flink-1.4.0/bin/start-local.sh
- 提交作业。
/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版本。下面是 运行 的步骤。
- 安装apache flink 1.3.2版本。 (
wget
它来自 here 并提取它)。
- cd 进入
flink-1.3.2
./bin/start-local.sh
,这将启动flink集群。做 cd ..
.
- 使用
git clone
和 cd
将 this repo 克隆到其中。
mvn clean package
构建项目。这将创建 target
目录。
- 运行
../flink-1.3.2/bin/flink run target/cep-monitoring-1.0.jar
,开始进程。
- 在单独的终端中,可以像这样记录输出(假设您与上一步位于同一目录中)
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)
我正在尝试理解 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集群:
- 运行弗林克。
/path/to/flink-1.4.0/bin/start-local.sh
- 提交作业。
/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版本。下面是 运行 的步骤。
- 安装apache flink 1.3.2版本。 (
wget
它来自 here 并提取它)。 - cd 进入
flink-1.3.2
./bin/start-local.sh
,这将启动flink集群。做cd ..
.- 使用
git clone
和cd
将 this repo 克隆到其中。 mvn clean package
构建项目。这将创建target
目录。- 运行
../flink-1.3.2/bin/flink run target/cep-monitoring-1.0.jar
,开始进程。 - 在单独的终端中,可以像这样记录输出(假设您与上一步位于同一目录中)
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)