scala – Spark-submit ClassNotFound异常
使用这个简单的例子,我遇到了“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文件. 其中一个执行者的日志在这里: 标准输出:http://pastebin.com/raw.php?i=DQvvGhKm stderr:http://pastebin.com/raw.php?i=MPZZVa0Q 我正在使用Spark 1.0.2. ClassToRoundTrip包含在JAR中. 解决方法
我有同样的问题.如果master是本地的,那么程序对大多数人来说运行良好.如果他们把它设置为(也发生在我身上)“spark:// myurl:7077”如果不起作用.大多数人都会收到错误,因为在执行期间未找到匿名类.它通过使用SparkContext.addJars(“路径到jar”)来解决.
确保您正在做以下事情: – > SparkContext.addJars(“从maven创建jar的路径[hint:mvn package]”). 注意:最后一点的jar jar pathToYourJar / target / yourJarFromMaven.jar也在代码中设置,如此答案的第一点. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 任何方式知道一个变量是否是一个angularjs promise?
- MVC bootstrap-table显示数据时显示No matching records fo
- ______和_ _在Scala(两个单独的操作)中是什么意思?
- 如何进行验证和使用.. $setPristine();在AngularJS表格中?
- 在Unix / Bash中,“xargs -p”是在运行任何命令之前提示确认
- 出差总结2:程序效率问题
- 《数据结构》实验五【顺序树】
- 手机不能访问webservice的问题解决
- Lift(Scala)嵌套代码段(每天多个项目)
- 使用AngularJS的jQuery datepicker:“TypeError:element.