gpt4 book ai didi

apache-spark - Spark 使用哪个内存部分来计算不会被持久化的 RDD

转载 作者:行者123 更新时间:2023-12-04 16:08:18 26 4
gpt4 key购买 nike

我是 Spark 的新手,我知道 Spark 将执行程序内存分为以下几部分:

RDD 存储: Spark 使用 .persist() 或 .cache() 来存储持久化的 RDD,并且可以通过设置 spark.storage.memoryFraction (默认 0.6)来定义

随机和聚合缓冲区: Spark 用于存储 shuffle 输出。它可以使用 spark.shuffle.memoryFraction 定义。如果 shuffle 输出超过这个分数,那么 Spark 会将数据溢出到磁盘(默认 0.2)

用户代码: Spark 使用这个分数来执行任意用户代码(默认 0.2)

为简单起见,我没有提到存储和洗牌安全分数。

我的问题是,Spark 使用哪个内存部分来计算和转换不会被持久化的 RDD?例如:

lines = sc.textFile("i am a big file.txt")
count = lines.flatMap(lambda x: x.split(' ')).map(lambda x: (x, 1)).reduceByKey(add)

这里 Spark 不会一次加载整个文件,而是会对输入文件进行分区,并在单个阶段中对每个分区进行所有这些转换。但是,Spark 将使用哪个内存部分来加载分区行、计算 flatMap() 和 map()?

谢谢

更新:
上面显示的代码只是实际应用程序的一个子集,如 count使用 saveAsTextFile 保存这将触发 RDD 计算。此外,我的问题对于 Spark 的行为是通用的,而不是特定于发布的示例

最佳答案

这是我在 Spark 邮件列表中从 Andrew Or 那里得到的答案:

It would be whatever's left in the JVM. This is not explicitly controlled by a fraction like storage or shuffle. However, the computation usually doesn't need to use that much space. In my experience it's almost always the caching or the aggregation during shuffles that's the most memory intensive.

关于apache-spark - Spark 使用哪个内存部分来计算不会被持久化的 RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31506615/

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