gpt4 book ai didi

apache-spark - 了解Spark Shuffle溢出

转载 作者:行者123 更新时间:2023-12-04 04:00:40 25 4
gpt4 key购买 nike

如果我理解正确,那么当reduce任务开始收集其输入的shuffle块(来自不同map任务的输出)时,它将首先将它们存储在内存中(Q1)。当执行程序的重新混合保留的内存量用尽时(在更改内存管理(Q2)之前),内存中的数据将“堆积”到磁盘上。如果spark.shuffle.spill.compress为true,则以压缩方式将内存中的数据写入磁盘。

我的问题:

Q0:我的理解正确吗?

Q1:reduce任务中收集的数据是否始终未压缩?

问题2:如何估算可用于收集随机播放块的执行器内存量?

Q3:我已经看到过这样的说法:“当数据集无法容纳在内存中时,就会发生随机溢出”,但据我所知,只要保留随机执行的执行器内存足够大,可以容纳其所有(未压缩的)随机输入块事件任务,那么就不会发生溢出,对吗?

如果是这样,为了避免溢出,需要确保在所有并行的reduce端任务中结束的(未压缩的)数据小于执行者的随机保留的内存部分吗?

最佳答案

1.6之前和之后的内存管理有所不同。在这两种情况下,都有执行内存和存储内存的概念。区别在于1.6之前是静态的。意味着有一个配置参数,用于指定执行和存储的内存量。当其中任何一个都不足够时,就会发生溢出。

Apache Spark必须解决的问题之一是并发执行:

  • 并行执行的不同阶段
  • 不同的任务,例如聚合或排序。


  • 我想说你的理解是正确的。
  • 内存中的内容未压缩,否则无法处理。执行内存以块的形式溢出到磁盘中,并且可以压缩。
  • 好吧,从1.3.1开始,您可以对其进行配置,那么您就知道大小了。至于任何时候剩下的内容,您都可以通过使用jstat -gcutil <pid> <period>之类的执行程序来查看。它可能会为您提供那里有多少可用内存的线索。知道为存储和执行配置了多少内存后,尽可能少的default.parallelism可能会为您提供线索。
  • 是的,但是很难推理。数据中可能存在偏差,例如某些键的值比其他键更多,并行执行的次数很多,等等。
  • 关于apache-spark - 了解Spark Shuffle溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37848182/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com