首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark-提交ClassNotFound异常

Spark-提交ClassNotFound异常
EN

Stack Overflow用户
提问于 2014-09-05 14:36:32
回答 5查看 57.4K关注 0票数 24

使用这个简单的示例,我遇到了"ClassNotFound“异常的问题:

代码语言:javascript
复制
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

import java.net.URLClassLoader

import scala.util.Marshal

class ClassToRoundTrip(val id: Int) extends scala.Serializable {
}

object RoundTripTester {

  def test(id : Int) : ClassToRoundTrip = {

    // Get the current classpath and output. Can we see simpleapp jar?
    val cl = ClassLoader.getSystemClassLoader
    val urls = cl.asInstanceOf[URLClassLoader].getURLs
    urls.foreach(url => println("Executor classpath is:" + url.getFile))

    // Simply instantiating an instance of object and using it works fine.
    val testObj = new ClassToRoundTrip(id)
    println("testObj.id: " + testObj.id)

    val testObjBytes = Marshal.dump(testObj)
    val testObjRoundTrip = Marshal.load[ClassToRoundTrip](testObjBytes)  // <<-- ClassNotFoundException here
    testObjRoundTrip
  }
}

object SimpleApp {
  def main(args: Array[String]) {

    val conf = new SparkConf().setAppName("Simple Application")
    val sc = new SparkContext(conf)

    val cl = ClassLoader.getSystemClassLoader
    val urls = cl.asInstanceOf[URLClassLoader].getURLs
    urls.foreach(url => println("Driver classpath is: " + url.getFile))

    val data = Array(1, 2, 3, 4, 5)
    val distData = sc.parallelize(data)
    distData.foreach(x=> RoundTripTester.test(x))
  }
}

在本地模式下,按照文档提交将在第31行生成"ClassNotFound“异常,其中ClassToRoundTrip对象被反序列化。奇怪的是,第28行的早期用法是可以的:

代码语言:javascript
复制
spark-submit --class "SimpleApp" \
             --master local[4] \
             target/scala-2.10/simpleapp_2.10-1.0.jar

但是,如果我为“驱动程序类路径”和"-jars“添加额外的参数,那么它在本地可以正常工作。

代码语言:javascript
复制
spark-submit --class "SimpleApp" \
             --master local[4] \
             --driver-class-path /home/xxxxxxx/workspace/SimpleApp/target/scala-2.10/simpleapp_2.10-1.0.jar \
             --jars /home/xxxxxxx/workspace/SimpleApp/target/scala-2.10/SimpleApp.jar \
             target/scala-2.10/simpleapp_2.10-1.0.jar

但是,向本地开发主程序提交仍然会产生相同的问题:

代码语言:javascript
复制
spark-submit --class "SimpleApp" \
             --master spark://localhost.localdomain:7077 \
             --driver-class-path /home/xxxxxxx/workspace/SimpleApp/target/scala-2.10/simpleapp_2.10-1.0.jar \
             --jars /home/xxxxxxx/workspace/SimpleApp/target/scala-2.10/simpleapp_2.10-1.0.jar \
             target/scala-2.10/simpleapp_2.10-1.0.jar

从输出中可以看出,JAR文件是由执行器获取的。

其中一个遗嘱执行人的日志在这里:

标准输出:http://pastebin.com/raw.php?i=DQvvGhKm

stderr:http://pastebin.com/raw.php?i=MPZZVa0Q

我用的是火花1.0.2。ClassToRoundTrip包含在JAR中。我宁愿不必硬编码SPARK_CLASSPATH或SparkContext.addJar中的值。有人能帮忙吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-02-15 01:37:33

我也有过同样的问题。如果主人是本地的,那么对大多数人来说,程序运行得很好。如果他们把它设置为(也发生在我身上)“火花://myurl:7077”,它就无效了。大多数人都会收到错误,因为在执行过程中找不到匿名类。它通过使用SparkContext.addJars (“到jar的路径”)进行解析。

确保您正在做以下事情:-

  • SparkContext.addJars(“从maven提示创建的jar路径: mvn包”)。
  • 我在代码中使用了SparkConf.setMaster(" spark ://myurl:7077"),并在通过命令行提交作业时提供了与参数相同的内容。
  • 当您在命令行中指定类时,请确保您正在用URL编写它的完整名称。例:"packageName.ClassName“
  • 最后的命令应该类似于bin/submit-类"packageName.ClassName“--主星星之火://myurl:7077 pathToYourJar/target/yourJarFromMaven.jar

注意:在最后一点的jar路径pathToYourJar//yourJarFromMaven.jar中,在代码中也设置了这个答案的第一点。

票数 18
EN

Stack Overflow用户

发布于 2015-02-18 17:00:05

我也有同样的问题。我想在我将它添加到SparkConf中之后,它工作得很好。

代码语言:javascript
复制
 val conf = new SparkConf().setMaster("...").setJars(Seq("/a/b/x.jar", "/c/d/y.jar"))

这个解决问题的网页也很有用。

票数 4
EN

Stack Overflow用户

发布于 2015-08-27 14:48:23

您应该在SPARK_CLASS_PATH火花-env.sh文件中设置如下所示:

代码语言:javascript
复制
SPARK_LOCAL_IP=your local ip 
SPARK_CLASSPATH=your external jars

你应该用这样的火花壳提交:spark-submit --class your.runclass --master spark://yourSparkMasterHostname:7077 /your.jar

您的java代码如下:

代码语言:javascript
复制
SparkConf sparkconf = new SparkConf().setAppName("sparkOnHbase");  JavaSparkContext sc = new JavaSparkContext(sparkconf);

那就成功了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25688349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档