热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:SparksubmitClassNotFoundexception

本文由编程笔记#小编为大家整理,主要介绍了Spark-submitClassNotFoundexception相关的知识,希望对你有一定的参考价值。
本文由编程笔记#小编为大家整理,主要介绍了Spark-submit ClassNotFoundexception相关的知识,希望对你有一定的参考价值。



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

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行的早期使用是可以的:

spark-submit --class "SimpleApp"
--master local[4]
target/scala-2.10/simpleapp_2.10-1.0.jar

但是,如果我为“driver-class-path”和“-jars”添加额外的参数,它在本地工作正常。

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

但是,提交给本地开发人员仍然会生成相同的问题:

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文件。

其中一个执行者的日志在这里:

stdout:http://pastebin.com/raw.php?i=DQvvGhKm

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

我正在使用Spark 1.0.2。 ClassToRoundTrip包含在JAR中。我宁愿不必在SPARK_CLASSPATH或SparkContext.addJar中硬编码值。有人可以帮忙吗?


答案

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

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



  • SparkContext.addJars(“从maven创建jar的路径[hint:mvn package]”)。

  • 我在代码中使用了SparkConf.setMaster(“spark:// myurl:7077”)并在通过命令行提交作业时提供了相同的参数。

  • 在命令行中指定类时,请确保使用URL编写其完整名称。例如:“packageName.ClassName”

  • 最终命令应该看起来像这个bin / spark-submit --class“packageName.ClassName”--master spark:// myurl:7077 pathToYourJar / target / yourJarFromMaven.jar

注意:最后一点的jar jar pathToYourJar / target / yourJarFromMaven.jar也在代码中设置,如此答案的第一点。


另一答案

我也有同样的问题。我认为--jars不会将罐装运送给执行者。我将它添加到SparkConf后,它工作正常。

val cOnf= new SparkConf().setMaster("...").setJars(Seq("/a/b/x.jar", "/c/d/y.jar"))

This web page for trouble shooting也很有用。


另一答案

你应该在spark-env.sh文件中设置SPARK_CLASS_PATH,如下所示:

SPARK_LOCAL_IP=your local ip
SPARK_CLASSPATH=your external jars

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

和你的java代码如下:

SparkConf sparkcOnf= new SparkConf().setAppName("sparkOnHbase"); JavaSparkContext sc = new JavaSparkContext(sparkconf);

然后它会工作。


另一答案

如果您使用Maven和Maven Assembly插件使用mvn package构建jar文件,请确保正确配置程序集插件以指向Spark应用程序的主类。

这样的东西应该添加到你的pom.xml,以避免任何java.lang.ClassNotFoundException


org.apache.maven.plugins
maven-assembly-plugin
2.4.1



com.my.package.SparkDriverApp



jar-with-dependencies

false



package
package

single





另一答案

我想到的是,如果你在没有任何警告的情况下构建你的项目,那么你就不必为master和其他东西编写额外的代码。虽然这是一个很好的做法,但你可以避免它。就像我的情况一样,项目中没有警告,所以我能够在没有任何额外代码的情况下运行它。 Project Structure Link

在我有一些与构建相关的警告的情况下,我必须在代码中以及执行时处理JAR路径,我的URL和master。

我希望它可以帮助某人。干杯!



推荐阅读
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 标题: ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
  • 本文介绍了Java中Currency类的getInstance()方法,该方法用于检索给定货币代码的该货币的实例。文章详细解释了方法的语法、参数、返回值和异常,并提供了一个示例程序来说明该方法的工作原理。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
author-avatar
永远路鸣
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有