Spark统一内存管理:UnifiedMemoryManager spark优化
目录
1 什么是 UnifiedMemoryManager
UnifiedMemoryManager是Spark统一内存管理。它主要由2部分内存:spark部分内存和系统部分。
spark部分:由 spark memory 和Execution memory Storage memory组成
系统部分:user memory
UnifiedMemoryManager是Spark统一内存管理在spark优化中很重要,那它的这2部分内存是怎么分配的呢,这比例分多少最合适呢? 看下图
2 存储区的大小
Execution和Storage之间是软边界,任一方都可以从另一方借用内存。
Execution和Storage之间共享的区域是通过spark.memory.fraction
(1.6.2默认为0.75,2.2默认值0.6)配置的,大小是:(HeapSize-300MB)0.75
存储区的大小为0.75 0.5 = 0.375的堆空间(默认的情况下)
存储可以借用尽可能多的执行内存,直到执行回收其空间。 当发生这种情况时,缓存的块将被释放到内存中,直到释放足够的借用内存以满足执行存储器请求。 类似地,执行可以借用尽可能多的存储空间。然而,由于执行此操作涉及复杂性,执行内存不会因存储而被驱逐。 这意味着,如果执行已经占用了大部分存储空间,那么尝试缓存块可能会失败,在这种情况下,新块将根据各自的存储级别去降级存储。
spark其它优化部分可以看spark常用性能调优。