【发布时间】:2021-01-11 12:00:11
【问题描述】:
我正在运行我的 spark 程序,该程序在本地工作但不是远程工作。 我的程序有这些组件(容器):
- 我的应用程序基于 spring(用于 REST 调用),它启动驱动程序(使用 getOrCreate 的 Spark Session)并具有我构建的所有转换器。
- 基于 bitnami 图像的 Spark Master。
- Spark Worker 基于 bitnami 映像,但也具有我的应用程序的所有依赖项(即 /dependencies 目录下的所有 jar)。
本地一切正常,但远程运行带有 UDF 的转换器时出现该错误(其余转换器(即没有 UDF)工作正常):
原因:java.lang.ClassCastException:无法将 scala.collection.immutable.List$SerializationProxy 的实例分配给 org.apache.spark.rdd.RDD.org$apache$spark$rdd$RDD$$dependencies_ 的字段在 java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2301) 的 java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1431) 的 org.apache.spark.rdd.MapPartitionsRDD 实例中键入 scala.collection.Seq在 java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2350) 在 java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2268) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2126)在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1625) 在 java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2344) 在 java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2268)在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2126) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1625) 在 java.io.ObjectInputStream.readObject(ObjectInputStream.java:465)在 java.io.ObjectInputStream.readObject(ObjectInputStream.java:423) 在 scala.collection.immutable.List$SerializationProxy.readObject(List.scala:490) 在 sun.reflect.GeneratedMethodAccessor3.invoke(未知来源)在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ...
这是我的 Spark 会话代码:
val sparkConf = new SparkConf()
.setMaster("spark://spark-master:7077")
.setAppName("My-App")
.set("spark.executor.extraClassPath", "/dependencies/*")
val spark = SparkSession.builder().config(sparkConf).getOrCreate()
因此,具有外部依赖项的作业可以正常工作,但 UDF 会产生上述错误。 我还尝试将我的应用程序 jar(其中包含驱动程序和 spring 代码以及工作程序中已经存在的所有其他依赖项)添加到工作程序中的依赖项文件夹,但仍然会产生错误。还尝试将其放置在与驱动程序相同的位置的工作人员中,并使用“spark.jars”将其位置添加到 sparkConf,但没有成功。 有什么建议吗?
【问题讨论】:
-
不,我写在问题的底部。尝试使用“spark.jars”将我的应用程序 jar 添加到工作映像,但没有成功
标签: scala apache-spark apache-spark-standalone