Ho creato un'applicazione Apache Spark tramite Java. Tutto ciò che fa è contare le righe contenenti la parola "scintilla" 1000 volte.Appletazione Java Spark: java.lang.ClassNotFoundException
Ecco il mio codice:
public class Example1 {
public static void main(String[] args) {
String logfile = args[0];
try{
SparkConf conf = new SparkConf();
conf.setAppName("Sample");
conf.setMaster("spark://<master>:7077");
conf.set("spark.executor.memory", "1g");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> logData = sc.textFile(logfile).cache();
long count = 0;
for(int i=0; i<=1000; i++){
count += logData.filter(new Function<String, Boolean>(){
public Boolean call(String s){
if (s.toLowerCase().contains("spark"))
return true;
else
return false;
}
}).count();
}
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
}
}
Quando si esegue il debug in Eclipse IDE, io sto incontrando java.lang.ClassNotFoundException
:
WARN scheduler.TaskSetManager: Loss was due to java.lang.ClassNotFoundException
java.lang.ClassNotFoundException: org.spark.java.examples.Example1$1
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
Ho provato anche la distribuzione di questo all'interno del cluster utilizzando spark-submit
, ma ancora , si è verificata la stessa eccezione. Ecco una parte della stacktrace:
ERROR Executor: Exception in task ID 4
java.lang.ClassNotFoundException: org.spark.java.examples.Example1$1
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 java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
Qualche idea su come risolvere questo problema? Grazie in anticipo!
curioso perché la necessità di eseguire il ciclo 1000x sullo stesso filtro? – maasg
@maasg questo è solo per simulare un possibile lavoro grande/lungo, e controllare quanto tempo ci vorrà quando viene eseguito sul cluster – jaysonpryde