2015-06-01 25 views
6

我试图在本地模式下执行Apache Flink中的示例程序。在本地执行示例Flink程序

import org.apache.flink.api.common.functions.FlatMapFunction; 
import org.apache.flink.api.java.DataSet; 
import org.apache.flink.api.java.ExecutionEnvironment; 
import org.apache.flink.api.java.tuple.Tuple2; 
import org.apache.flink.util.Collector; 


public class WordCountExample { 
    public static void main(String[] args) throws Exception { 
     final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); 

     DataSet<String> text = env.fromElements(
      "Who's there?", 
      "I think I hear them. Stand, ho! Who's there?"); 
     //DataSet<String> text1 = env.readTextFile(args[0]); 

     DataSet<Tuple2<String, Integer>> wordCounts = text 
      .flatMap(new LineSplitter()) 
      .groupBy(0) 
      .sum(1); 

     wordCounts.print(); 
     env.execute(); 

     env.execute("Word Count Example"); 
    } 

    public static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> { 
     @Override 
     public void flatMap(String line, Collector<Tuple2<String, Integer>> out) { 
      for (String word : line.split(" ")) { 
       out.collect(new Tuple2<String, Integer>(word, 1)); 
      } 
     } 
    } 
} 

这是给我的例外:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/mapreduce/InputFormat 
    at WordCountExample.main(WordCountExample.java:10) 
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.mapreduce.InputFormat 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 1 more 

我在做什么错?

我也使用了正确的罐子。 弗林克的Java-0.9.0-里程碑 - 1.jar 弗林克的客户端-0.9.0-里程碑 - 1.jar 弗林克核-0.9.0-里程碑 - 1.jar

+0

你到底该如何执行程序?您是通过CLI客户端还是Web提交客户端从IDE运行它? –

+0

我正在从IDE运行它,将它作为普通的Java应用程序运行。 –

+0

正如文档中给出的那样,我可以在本地模式下直接在桌面上运行它 –

回答

2

NoClassDefFoundError的延伸LinkageError类

当Java虚拟机或ClassLoader实例试图在一个类的定义 负载抛出该异常(作为普通方法调用或 如使用新的表达式创建新实例的一部分的部分)和没有 类的定义可以找到。搜索类 定义在编译当前正在执行的类时存在, 但定义无法找到。

您的代码/ jar依赖于hadoop。在此处找到它下载jar文件并将其添加到类路径中org.apache.hadoop.mapreduce.InputFormat

+0

我在本地运行我的代码。应该将环境设置为本地,而不是以hadoop模式。这就是为什么我在这里困惑。 –

+0

flink依赖于hadoop,请确保您拥有正确的jar文件,请参阅https://flink.apache.org/downloads.html **或** http://mvnrepository.com/artifact/org.apache.flink/ flink-java/0.9.0-milestone-1-hadoop1 – Sarz

+0

它不依赖于hadoop先生。有一些罐子可供flink独立使用。 –

7

将三个Flink Jar文件作为依赖项添加到项目中是不够的,因为它们具有其他传递依赖关系,例如在Hadoop上。

获取工作设置以开发(和本地执行)Flink程序的最简单方法是遵循使用Maven原型来配置Maven项目的quickstart guide。这个Maven项目可以导入到您的IDE中。