Apache Spark java.lang.ClassNotFoundException
Étincelle autonome cluster semble qu'il tourne sans problème :
http://i.stack.imgur.com/gF1fN.png
J'ai suivi ce tutoriel.
J'ai construit un gros pot pour l'exécution de cette JavaApp sur le cluster. Avant de maven package:
find .
./pom.xml
./src
./src/main
./src/main/java
./src/main/java/SimpleApp.java
contenu de SimpleApp.java est :
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);
}
}
Ce programme ne fonctionne que lorsque le maître est défini comme setMaster("local"). Sinon, j'obtiens cette erreur
$java -cp path_to_file/simple-project-1.0-allinone.jar SimpleApp
http://i.stack.imgur.com/doRSn.png
- Vous devez définir ADD_JARS environnement pour pointer vers votre fichier jar. Par exemple,
export ADD_JARS=path_to_file/simple-project-1.0-allinone.jar; java -cp path_to_file/simple-project-1.0-allinone.jar SimpleApp
- Toujours la même erreur.
Vous devez vous connecter pour publier un commentaire.
Il y a la classe anonyme (qui s'étend de la Fonction) dans SimpleApp.java fichier. Cette classe est compilée à SimpleApp$1, qui devrait être diffusée à chaque travailleur dans l'Étincelle de cluster.
Le moyen le plus simple pour cela est d'ajouter le jar explicitement à la bougie contexte. Ajouter quelque chose comme
sparkContext.addJar("path_to_file/simple-project-1.0-allinone.jar")
aprèsJavaSparkContext
de la création et de la reconstruction de votre fichier jar. Puis les principaux Étincelle programme (appelé le pilote) enverra automatiquement votre code d'application pour le cluster.