我在使用以下简单示例时遇到了“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
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文件正在被执行器提取。
下面是其中一个执行程序的日志:
我也有同样的问题。如果master是本地的,那么程序对大多数人来说运行良好。如果他们设置为(我也遇到过)“spark://myurl:7077”,那就不起作用了。大多数人会得到错误,因为在执行过程中找不到匿名类。它通过使用sparkcontext.addjars(“到jar的路径”)来解决。
确保你正在做以下事情:-
注意:最后一点中的这个jar pathToYourJar/target/YourJarFromMaven.jar也在代码中设置为这个答案的第一点。
我正在将数据转换为数据帧,将其写入HDFS: 密码 已创建文件夹,但未写入文件。 程序因以下错误而终止: 在我的pom中,我使用了各自的依赖项: 火花-core_2.11 火花-sql_2.11 火花-streaming_2.11 火花流-kafka-0-10_2.11
我正尝试使用Spark 2.0.2从hbase数据库(1.2.5)中获取数据,此页面中的代码为:https://github.com/apache/hbase/blob/master/hbase-spark/src/main/java/org/apache/hadoop/hbase/Spark/example/hbaseContext/javahbasebulkgetexample.java 但我
我有一个spark jar,我正试图将其提交给我的本地spark实例。jar是这样的包:按照maven结构,所有配置文件都存在于/resources文件夹中。 以下是例外情况: 在上述异常中,可以观察到的一件事是<代码> 在jar末尾标记:
我在运行代码时遇到以下异常: 线程“main”java.lang.noClassDeffounderror:org/apache/spark/logging在java.lang.ClassLoader.DefineClass1(Native Method),在java.security.secureClassLoader.DefineClass1(classLoader.java:760),在ja
我正在使用这个快速入门教程,尝试使用spark submit命令运行这个简单的spark应用程序。http://spark.apache.org/docs/1.2.0/quick-start.html#self-包含的应用程序。当我尝试使用spark-1.4.0-bin-hadoop2.6\bin运行它时 有人知道如何解决这个问题吗?非常感谢任何帮助。
在spark数据集中获取此空错误。滤器 输入CSV: 工作代码: 失败代码(添加以下行返回错误): 返回空错误