gpt4 book ai didi

caching - Apache 星火 : User Memory vs Spark Memory

转载 作者:IT王子 更新时间:2023-10-28 23:38:37 27 4
gpt4 key购买 nike

我正在构建一个 Spark 应用程序,我必须在其中缓存大约 15 GB 的 CSV 文件。我读到了新的 UnifiedMemoryManager Spark 1.6 在这里介绍:

https://0x0fff.com/spark-memory-management/

它还显示了这张图片: enter image description here

作者不同User MemorySpark Memory (再次拆分为 Storage and Execution Memory )。据我了解,Spark Memory 可以灵活地执行(随机播放、排序等)和存储(缓存)内容 - 如果需要更多内存,它可以从另一部分使用它(如果尚未完全使用)。这个假设正确吗?

用户内存是这样描述的:

User Memory. This is the memory pool that remains after the allocation of Spark Memory, and it is completely up to you to use it in a way you like. You can store your own data structures there that would be used in RDD transformations. For example, you can rewrite Spark aggregation by using mapPartitions transformation maintaining hash table for this aggregation to run, which would consume so called User Memory. [...] And again, this is the User Memory and its completely up to you what would be stored in this RAM and how, Spark makes completely no accounting on what you do there and whether you respect this boundary or not. Not respecting this boundary in your code might cause OOM error.

我如何访问这部分内存或者 Spark 如何管理这部分内存?

为了我的目的,我只需要有足够的存储内存(因为我不做随机播放、加入等操作)?那么,我可以设置 spark.memory.storageFraction属性到 1.0?

对我来说最重要的问题是,用户内存呢?为什么呢,尤其是为了我上面描述的目的?

当我将程序更改为使用一些自己的类时,使用内存是否有区别,例如RDD<MyOwnRepresentationClass>而不是 RDD<String> ?

这是我的代码片段(在基准应用程序中从 Livy Client 多次调用它。我正在使用带有 Kryo 序列化的 Spark 1.6.2。

JavaRDD<String> inputRDD = sc.textFile(inputFile);

// Filter out invalid values
JavaRDD<String> cachedRDD = inputRDD.filter(new Function<String, Boolean>() {
@Override
public Boolean call(String row) throws Exception {
String[] parts = row.split(";");

// Some filtering stuff

return hasFailure;
}
}).persist(StorageLevel.MEMORY_ONLY_SER());

最佳答案

统一内存管理器

1) 在 HEAP 上:对象在 JVM 堆上分配并由 GC 绑定(bind)。

2)OFF HEAP:对象通过序列化分配在JVM之外的内存中,由应用程序管理,不受GC约束。这种内存管理方式可以避免频繁的GC,但缺点是需要自己编写内存分配和内存释放的逻辑。

在堆上:

Storage Memory:主要用于存储Spark缓存数据,如RDD缓存、Broadcast变量、Unroll数据等。

Execution Memory/shuffle memory:主要用于存储Shuffle、Join、Sort、Aggregation等计算过程中的临时数据。

用户内存:主要用于存储RDD转换操作所需的数据,例如RDD依赖的信息。

Reserved Memory:为系统保留的内存,用于存储Spark的内部对象。

堆外内存:- 1)存储内存(洗牌内存) 2) 执行内存

关于caching - Apache 星火 : User Memory vs Spark Memory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43756576/

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