Apache Spark java.lang.ClassNotFoundException

pro*_*ore 18 apache-spark

Spark独立集群看起来正在运行而没有问题:

http://i.stack.imgur.com/gF1fN.png 火花网ui

我按照本教程.

我已经构建了一个胖jar来在集群上运行这个JavaApp.在maven包之前:

find .

./pom.xml
./src
./src/main
./src/main/java
./src/main/java/SimpleApp.java
Run Code Online (Sandbox Code Playgroud)

SimpleApp.java的内容是:

 import org.apache.spark.api.java.*;
 import org.apache.spark.api.java.function.Function;
 import org.apache.spark.SparkConf;
 import org.apache.spark.SparkContext;


 public class SimpleApp {
 public static void main(String[] args) {

 SparkConf conf =  new SparkConf()
                   .setMaster("spark://10.35.23.13:7077")
                   .setAppName("My app")
                   .set("spark.executor.memory", "1g");

 JavaSparkContext   sc = new JavaSparkContext (conf);
 String logFile = "/home/ubuntu/spark-0.9.1/test_data";
 JavaRDD<String> logData = sc.textFile(logFile).cache();

 long numAs = logData.filter(new Function<String, Boolean>() {
  public Boolean call(String s) { return s.contains("a"); }
 }).count();

 System.out.println("Lines with a: " + numAs); 
 }
 }
Run Code Online (Sandbox Code Playgroud)

此程序仅在master设置为setMaster("local")时有效.否则我得到这个错误

$ java -cp path_to_file/simple-project-1.0-allinone.jar SimpleApp

http://i.stack.imgur.com/doRSn.png 错误截图

小智 46

在SimpleApp.java文件中有匿名类(扩展Function).此类编译为SimpleApp $ 1,应该向Spark集群中的每个worker广播.

最简单的方法是将jar显式添加到Spark上下文中.sparkContext.addJar("path_to_file/simple-project-1.0-allinone.jar")JavaSparkContext创建和重建jar文件之后添加类似的内容.然后主Spark程序(称为驱动程序)将自动将您的应用程序代码传递给集群.

  • 如果是这样,请关闭问题并接受@ homutov的答案作为最终答案. (16认同)