2015-12-30 31 views
0

我使用带有Cloudera 5.5.0的pyspark 1.5.0版。所有脚本运行良好,除非我使用sc.wholeTextFiles。使用这个命令给出了一个错误:spark整个文件文件对于大数据失败

Kryo Serialization failed: Buffer overflow. Available:0, required: 23205706. To avoid this, increase spark.kryoserializer.buffer.max

不过,我不觉得火花网络用户界面特性spark.kryoserializer.buffer.max;它不在Spark Web UI中的Environment选项卡下。此页面中唯一的“kryo”是名称spark.serializer的值org.apache.spark.selializer.KryoSerializer

为什么我看不到这个属性?以及如何解决这个问题?

EDIT

原来,KRYO错误是引起印刷到外壳。没有打印,错误实际上是java.io.IOExceptionL Filesystem closed! 该脚本现在对一小部分数据正常工作,但在所有数据上运行该脚本(大约500GB,10,000 files)都会返回此错误。

我试图传入--conf "spak.yarn.executor.memoryOverhead=2000",它似乎允许读取一小部分数据,但它最终仍会在完整数据上失败。在出现错误之前需要运行10-15分钟。

RDD很大,但即使只在其上执行.count(),也会产生错误。

回答

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缓冲您可能需要增加阿卡帧大小。

+0

没有什么区别,运行以下命令:'spark-submit --master yarn-client --num-executors 6 --conf“spark.kryoserializer.buffer.max = 128M”/ dev/myScript.py'。仍然'Kryo序列化失败:缓冲区溢出。可用性:0,要求:23205706'。 – Keldeo

+0

它可能很小'm',但我不是这样的... 您想要读取的文件有多大?那里有多少?您正在创建一个带有此功能的PairRDD,也许它只有几GB? – szefuf

+0

谢谢。不知何故,通过调用整个文本文件的take(1),对shell进行大量打印是导致kryo错误的原因。没有它,错误是不同的,我编辑相应。 – Keldeo