【问题标题】:spark wholeTextFiles fails for large dataspark wholeTextFiles 因大数据而失败
【发布时间】:2015-12-30 09:13:46
【问题描述】:

我使用 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”是名称spark.serializer 的值org.apache.spark.selializer.KryoSerializer

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

编辑

原来 Kryo 错误向外壳打印引起的。不打印,错误其实是java.io.IOExceptionL Filesystem closed! 该脚本现在可以对一小部分数据正常工作,但在所有数据(大约500GB10,000 files)上运行它会返回此错误。

我尝试传入属性--conf "spak.yarn.executor.memoryOverhead=2000",似乎它允许读取稍大部分的数据,但最终仍然无法读取完整数据。在出现错误之前需要运行 10-15 分钟。

RDD很大,但即使只对它做.count()也会产生错误。

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    您应该在提交作业时传递此类属性。这就是它不在 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 帧大小。

    【讨论】:

    • 没有区别,运行以下命令:spark-submit --master yarn-client --num-executors 6 --conf "spark.kryoserializer.buffer.max = 128M" /dev/myScript.py。还是Kryo serialization failed: Buffer overflow. Availabale: 0, required: 23205706.
    • 它可能很小m 但我不认为这是这种情况......您要读取的文件有多大?那里有多少?你正在用这个函数创建一个相当大的 PairRDD,也许它超过了几个 GB?
    • 谢谢。不知何故,通过调用整个文本文件的 take(1) 到 shell 的大量打印是导致 kryo 错误的原因。没有它错误是不同的,我进行了相应的编辑。
    猜你喜欢
    • 2019-09-19
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多