【问题标题】:Spilling issue on mapping stage when joining two big RDDs加入两个大 RDD 时映射阶段的溢出问题
【发布时间】:2015-12-08 02:09:27
【问题描述】:

我尝试对来自两个大文本文件的两个数据集应用 join。两个文本文件都包含如下两列:

*col1*     *document*
abc            1
aab            1
...           ...
ccd            2
abc            2
...           ...

我根据这两个文件的第一列加入这两个文件,并尝试找出文档有多少共同的 col1 值。两个文本文件的大小均为 10 GB。当我运行我的脚本时,spark 创建了 6 个阶段,每个阶段有 287 个分区。在这 6 个阶段中,有 4 个不同的阶段,一个 foreach 和一个 map。一切顺利,直到第五阶段的映射阶段。在那个阶段,火花停止处理分区,而是溢出到磁盘上,并且在溢出一万次后,它给出了与磁盘空间不足有关的错误。

我有 4 个内核和 8 GB 内存。我用 -Xmx8g 提供了所有内存。我也试过 set("spark.shuffle.spill", "true")。

My script:

{
...
val conf = new SparkConf().setAppName("ngram_app").setMaster("local[4]").set("spark.shuffle.spill", "false")
    val sc = new SparkContext(conf)


val emp = sc.textFile("...doc1.txt").map { line => val parts = line.split("\t")
     ((parts(5)),parts(0))
    }

    val emp_new = sc.textFile("...doc2.txt").map { line => val parts = line.split("\t")
      ((parts(3)),parts(1))
    }


val finalemp = emp_new.join(emp).
        map { case((nk1) ,((parts1), (val1))) => (parts1 + "-" + val1, 1)}.reduceByKey((a, b) => a + b)

    finalemp.foreach(println)

}

我应该怎么做才能避免大量溢出?

【问题讨论】:

    标签: scala apache-spark diskspace


    【解决方案1】:

    您似乎需要更改 Spark 的内存设置。如果您使用 spark-submit 脚本,您只需将 -executor-memory 8G 添加到您的命令中。设置 -Xmx8g 会影响 JVM,但不会影响 Spark(我相信默认为 256MB)。

    请注意,根据经验,您不应为 Spark 作业分配超过 75% 的可用内存。

    【讨论】:

    • 谢谢格伦尼。我将设置更改为 val conf = new SparkConf().setAppName("abdulhay").setMaster("local[4]").set("spark.shuffle.spill", "true") .set("spark. shuffle.memoryFraction", "0.6").set("spark.storage.memoryFraction", "0.2").set("spark.executor.memory","6g") 和 -Xmx6g。因此,在映射阶段它不会永久溢出,至少它完成了任务。然而,在完成一项任务之前,溢出平均需要 10 分钟。我有 1000 个分区。这样一台具有我上面给出的功能的计算机听起来正常吗?否则可能是瓶颈?
    • 您可能想看看这个问题并回答stackoverflow.com/questions/30797724/…,它提供了有关如何避免或尽量减少溢出的提示。另一方面,我会在您的join 之后使用mapValues 而不是map。当您执行mapValues 时,Spark 知道密钥没有更改并且仍然以相同的方式进行分区。以下reduceByKey 将因此运行得更快:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多