Подтвердить что ты не робот

Apache Spark java.lang.ClassNotFoundException

В автономном кластере Spark он работает без проблем:

http://i.stack.imgur.com/gF1fN.png spark web ui

Я последовал за этим учебником.

Я создал толстую банку для запуска этого JavaApp в кластере. Перед пакетом maven:

find .

./pom.xml
./src
./src/main
./src/main/java
./src/main/java/SimpleApp.java

содержимое 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); 
 }
 }

Эта программа работает только тогда, когда мастер установлен как setMaster ( "local" ). В противном случае я получаю эту ошибку

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

http://i.stack.imgur.com/doRSn.png error screenshot

4b9b3361

Ответ 1

Существует анонимный класс (который расширяет функцию) в файле SimpleApp.java. Этот класс компилируется в SimpleApp $1, который должен быть передан каждому работнику в Spark-кластере.

Самый простой способ - добавить ящик явно в контекст Spark. Добавьте что-то вроде sparkContext.addJar("path_to_file/simple-project-1.0-allinone.jar") после JavaSparkContext создания и восстановления вашего файла jar. Затем основная программа Spark (называемая программой driver) автоматически доставляет код приложения в кластер.