【发布时间】:2016-06-23 04:10:25
【问题描述】:
我遇到了一个只有在集群上运行 spark 作业时才会发生的问题。 当我在本地模式下运行时不会发生这种情况。
非常欢迎有关如何解决此问题的建议,但也非常感谢有关如何处理/调试此问题的建议。
我遇到的问题是,当我尝试加入 rdds 时,我得到一个 java.lang.StackOverflowError,显然是在对象序列化期间。 这是一些堆栈跟踪(它很长但会重复) -
Caused by: java.lang.StackOverflowError
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1427)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
仅当我尝试加入两个 rdds 时才会出现此问题。
rdd1.join(rdd2).count
如果不是,我会这样做
rdd1.count
rdd2.count
此错误不会重现。
(对我来说,这意味着这个问题与我加入两个 RDD 的事实有关,而不是与 RDD 的构造方式有关,因为它们似乎是单独成功处理的,但我可能是错的。)
RDD 由简单案例类的元组组成
val rdd1: RDD[(Device, Option[Usage])] = ...
val rdd2: RDD[(Device, Seq(Problem)] = ...
案例类只有简单的属性(String、Int、DateTime、Option[?])
case class Device(customerId: String, appId: String, deviceId: String, lastEngagement: Option[DateTime], firstSeen: Option[DateTime], lastEngagementUserClass: Option[String])
case class Usage(customerId: String, appId: String, deviceId: String, eventTimestamp: DateTime, appVersion: String, appVersionCode: Int, appSignature: Int, osVersion: String, lifecyclePhase: String, userClass: String)
case class Problem(customerId: String, appId: String, deviceId: String, eventTimestamp: DateTime, problemType: Int, problemSubType: Int, problemReasonId: String)
我正在使用 Spark 1.6.1 和 scala 2.10.5。
有什么建议吗?
更新:
我意识到这是一个广泛的问题。 不幸的是,它并不容易重现,因为它必须在火花集群上运行(不能在本地模式下重现),而且,它似乎无法用小样本数据重现 - 至少,我无法来创建这样的样本数据。
我希望有类似问题的人能够帮助我。我想我的问题是 - 你有类似的问题吗?你最后是怎么解决的?您是如何解决问题的?
【问题讨论】:
-
您能否发布一些易于复制粘贴的示例数据,以便我们重新创建您的错误?请阅读How to create a Minimal, Complete, and Verifiable example
-
我同意@KatyaHandler 。这太宽泛了,无法回答!
标签: apache-spark