gpt4 book ai didi

java - Amazon Elastic MapReduce 上的 Spark Java 错误 NoClassDefFoundError

转载 作者:太空宇宙 更新时间:2023-11-04 14:47:23 25 4
gpt4 key购买 nike

我正在尝试在 Amazon 的 Elastic MapReduce (EMR) 上实现并运行 Spark 应用程序。到目前为止,我已经能够使用以下链接通过“Spark Installation”引导操作来部署和运行集群:

s3://elasticmapreduce/samples/spark/0.8.1/install-spark-shark.sh

可以从 this 访问该脚本互联网方向。

为了将 .jar 应用程序上传到集群,我创建了一个步骤配置,如下所示:

 HadoopJarStepConfig customConfig = new HadoopJarStepConfig()
.withJar("s3://mybucket/SparkApp.jar")
.withMainClass("SparkApp.java");

StepConfig customJarStep = new StepConfig()
.withName("Run custom jar")
.withActionOnFailure(ActionOnFailure.CONTINUE)
.withHadoopJarStep(customConfig);

最后,以下代码显示了从 Spark 团队提供的 wordcount 示例中提取的实际 Spark 应用程序(针对 0.8.1 版本)。您可能会注意到,代码导入了不同的 Spark 库以便能够运行应用程序。这些库是:

spark-core_2.9.3-0.8.1-incubating.jar (and) scala-library-2.9.3.jar

import scala.Tuple2;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;

import java.util.Arrays;
import java.util.List;

public class SparkApp {
public static void main(String[] args) throws Exception {

JavaSparkContext ctx = new JavaSparkContext("local", "JavaWordCount",
System.getenv("SPARK_HOME"), System.getenv("SPARK_EXAMPLES_JAR"));
JavaRDD<String> lines = ctx.textFile("c3://murquiabucket/wordcount.txt", 1);

JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
public Iterable<String> call(String s) {
return Arrays.asList(s.split(" "));
}
});

JavaPairRDD<String, Integer> ones = words.map(new PairFunction<String, String, Integer>() {
public Tuple2<String, Integer> call(String s) {
return new Tuple2<String, Integer>(s, 1);
}
});

JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() {
public Integer call(Integer i1, Integer i2) {
return i1 + i2;
}
});

List<Tuple2<String, Integer>> output = counts.collect();
for (Tuple2 tuple : output) {
System.out.println(tuple._1 + ": " + tuple._2);
}
System.exit(0);
}
}

当我尝试在 EMR 集群中执行 jar(我制作了一个 fat jar 来嵌入必要的库)时,问题就出现了。由于以下错误,应用程序未能成功终止:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/mesos/Scheduler at java.lang.ClassLoader.defineClass1(Native Method) ...

据我了解,Mesos 有一个问题,我无法理解。如果此信息有帮助,这是 EMR 集群的信息:

  • AMI 版本:2.4.2
  • Hadoop 发行版:Amazon 1.0.3
  • Spark 版本:0.8.1
  • Scala 版本:2.9.3

最佳答案

正如 @samthebest 在上面的评论中指出的,该错误实际上是由于 EMR 上的 Spark 版本与我的应用程序不匹配错误造成的。

我从这个错误中学到的是,检查自定义应用程序执行中使用的所有库和应用程序是否使用与集群相同的版本非常重要。

关于java - Amazon Elastic MapReduce 上的 Spark Java 错误 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24245456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com