我使用pyspark 1.5.0版和Cloudera 5.5.0。除非我使用sc.wholeTextFiles
,否则所有脚本都运行正常。使用此命令会出错:
Kryo Serialization failed: Buffer overflow. Available:0, required: 23205706. To avoid this, increase spark.kryoserializer.buffer.max
但是,我在spark web UI中找不到属性spark.kryoserializer.buffer.max
;它不存在于Spark Web UI的Environment
选项卡下。此页面中唯一的“kryo”是名称org.apache.spark.selializer.KryoSerializer
的值spark.serializer
。
为什么我看不到这个属性?以及如何解决问题?
修改
原来 Kryo错误 由打印到shell 引起。没有打印,错误实际上是java.io.IOExceptionL Filesystem closed
!
该脚本现在可以正常处理一小部分数据,但在所有数据(约500GB
,10,000 files
)上运行它会返回此错误。
我试图传递属性--conf "spak.yarn.executor.memoryOverhead=2000"
,似乎它允许读取稍大一部分数据,但它仍然最终在完整数据上失败。在出现错误之前需要10-15分钟的运行时间。
RDD很大,但即使仅对其进行.count()
也会产生错误。
答案 0 :(得分:0)
您应该在提交工作时传递此类财产。这就是为什么它不在Cloudera UI中。 http://www.cloudera.com/content/www/en-us/documentation/enterprise/latest/topics/cdh_ig_running_spark_apps.html
在您的情况下:--conf "spark.kryoserializer.buffer.max = 64M"
(例如)
另外,我不确定但是如果你增加Kryo缓冲区可能会增加akka帧大小。