我已经使用Java创建了一个Apache Spark应用程序。它所做的只是将包含“spark”字的行计数1000次。
这是我的代码:
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());
}
}
}
当我在Eclipse IDE中执行调试时,遇到
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)
我还尝试使用
spark-submit
将其部署在集群中,但是仍然遇到相同的异常。这是堆栈跟踪的一部分: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)
有关如何解决此问题的任何想法?提前致谢!
最佳答案
您需要将 jar 和您的工作一起交付给 worker 。为此,让maven生成一个jar并将该jar添加到上下文中:
conf.setJars(new String[]{"path/to/jar/Sample.jar"}); [*]
对于“真正的”作业,您将需要构建一个具有依赖关系的jar(请检查Maven shade plugin),但是对于没有外部依赖关系的简单作业,只需一个简单的jar就足够了。
[*]我对Spark Java API不太熟悉,只是假设它应该是这样的。
关于apache-spark - Spark Java应用: java. lang.ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24206536/