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]()
Ответы
Ответ 1
Существует анонимный класс (который расширяет функцию) в файле SimpleApp.java. Этот класс компилируется в SimpleApp $1, который должен быть передан каждому работнику в Spark-кластере.
Самый простой способ - добавить ящик явно в контекст Spark. Добавьте что-то вроде sparkContext.addJar("path_to_file/simple-project-1.0-allinone.jar")
после JavaSparkContext
создания и восстановления вашего файла jar. Затем основная программа Spark (называемая программой driver) автоматически доставляет код приложения в кластер.