我在Apache Flink中有一个程序。我在本地机器上测试并运行了它,一切都很好。为了在远程集群上运行该程序,我做了必要的更改,如ApacheFlink官方网站中所述。
我做了以下更改:
-
下方的两点
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
ExecutionEnvironment env = ExecutionEnvironment.createRemoteEnvironment("taskManagerName",
portNo,paralelismNo);
-
修复读取输入文件和写入输出所需的路径。
-
从程序中生成一个薄jar,并放入必要的jar库添加到我的项目jar文件之外的一个名为
myproj.jar
。 -
将数据、jar库和myproj.jar复制到集群中并在集群上远程运行以下命令:
java -cp pathToJarLib \* -jar myproj.jar
但是,我得到了以下错误,我没有任何线索来解决这个问题。没有相关的日志文件可以帮助我解决这个问题。
错误:
线程"main"java.lang.NoClassDefFoundError:org/apache/flink/api/common/functions/MapFunction中出现异常位于java.lang.Class.getDeclaredMethods0(本机方法)位于java.lang.Class.privateGetDeclaredMethods(Class.java:2570)位于java.lang.Class.getMethod0(Class.java:2813)位于java.lang.Class.getMethod(Class.java:1663)在sun.selauncher.LauncherHelper.getMainMethod(LauncherHelper.java:494)在sun.selauncher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)引起原因:java.lang.ClassNotFoundException:org.apache.flink.api.common.functions.MapFunction位于java.net.URLClassLoader$1.run(URLClassLoader.java:366)位于java.net.URLClassLoader$1.run(URLClassLoader.java:355)位于java.security.AccessController.doPrivileged(本机方法)位于java.net.URLClassLoader.findClass(URLClassLoader.java:354)位于java.lang.ClassLoader.loadClass(ClassLoader.java:425)在sun.mic.Launcher$AppClassLoader.loadClass(Launcher.java:308)位于java.lang.ClassLoader.loadClass(ClassLoader.java:358)…还有6个
您的类路径显然不完整。尝试通过bin/flink run myproj.jar
提交。这将正确设置类路径。