Scala 火花广播错误:超过SPARK.AKKA框架考虑使用广播

Scala 火花广播错误:超过SPARK.AKKA框架考虑使用广播,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,我有一个叫做“边缘”的大数据 与.saveAsTextFile(“边”)相同 这是火花壳上的。我已尝试使用该选项 --驱动程序java选项“-Dspark.akka.frameSize=15” 但当我这么做的时候,它就会无限期地挂起。任何帮助都将不胜感激 **编辑** 我的独立模式是Spark 1.1.0,我的群集是Spark 1.0.1 另外,当我去计数、收集或保存RDD时,挂起也会发生,但定义它或对其执行过滤器工作正常。错误消息“考虑对大值使用广播变量”通常表示您在函数闭包中捕获了一些大变量

我有一个叫做“边缘”的大数据

与.saveAsTextFile(“边”)相同

这是火花壳上的。我已尝试使用该选项
--驱动程序java选项“-Dspark.akka.frameSize=15”

但当我这么做的时候,它就会无限期地挂起。任何帮助都将不胜感激

**编辑**

我的独立模式是Spark 1.1.0,我的群集是Spark 1.0.1

另外,当我去计数、收集或保存RDD时,挂起也会发生,但定义它或对其执行过滤器工作正常。

错误消息“考虑对大值使用广播变量”通常表示您在函数闭包中捕获了一些大变量。例如,您可能编写了以下内容

val someBigObject = ...
rdd.mapPartitions { x => doSomething(someBigObject, x) }.count()
这会导致
someBigObject
被捕获并与任务一起序列化。如果您正在执行类似的操作,则可以使用,这将导致在任务本身中只存储对对象的引用,而实际对象数据将单独发送

在Spark 1.1.0+中,不必严格使用广播变量,因为任务将自动广播(有关更多详细信息,请参阅)。仍然有理由使用广播变量(例如跨多个操作/作业共享一个大对象),但不需要使用它来避免帧大小错误


另一个选择是增加Akka帧的大小。在任何Spark版本中,您都应该能够在创建SparkContext之前在
SparkConf
中设置
Spark.akka.frameSize
设置。不过,正如您可能已经注意到的,在为您创建上下文的
spark shell
中,这要困难一些。在较新版本的Spark(1.1.0及更高版本)中,您可以在启动
Spark shell时传递
--conf Spark.akka.frameSize=16
。在Spark 1.0.1或1.0.2中,您应该能够通过
--驱动程序java选项“-Dspark.akka.frameSize=16”

您使用的是哪一版本的Spark?如果您升级到Spark 1.1.0+,这应该不再是一个问题,因为较新版本的Spark会自动广播任务的代码。谢谢Josh,我会尝试并让您知道。我现在使用的是1.0.1。另外,在我升级之前,你对1.0.1有什么变通方法吗?我发布了一个答案,只是为了为错误消息提供一些额外的上下文和指向相关JIRAs的指针。Spark 1.0.0中肯定有一个与较大的帧大小相关的bug(请参阅),但它应该在1.0.1中修复。当你说它挂起的时候,它挂在什么地方?什么时候发射炮弹?管理工作?启动遗嘱执行人?你一针见血。我有一个从文本文件映射的大对象。如果我增加frameSize,当我转到count或.saveAsTextFile时,它将挂起。一切都很好。关于如何处理绞刑有什么建议吗?谢谢最终,我升级到了1.1.0。但当我还在构建一个大型数据集时,我必须发送——executor memory 16g
edges.count
...
Serialized task 28:0 was 12519797 bytes which exceeds spark.akka.frameSize
  (10485760 bytes). Consider using broadcast variables for large values.
val someBigObject = ...
rdd.mapPartitions { x => doSomething(someBigObject, x) }.count()