Spark内存管理

来源:互联网 发布:优斗士网络推广效果 编辑:程序博客网 时间:2024/04/30 18:59

spark内存用途:

• RDD存储
当调用RDD 的persist() 或cache() 方法时,这个RDD 的分区会被存储到缓存区中。Spark 会根据spark.storage.memoryFraction 限制用来缓存的内存占整个JVM 堆空间的
比例大小。如果超出限制,旧的分区数据会被移出内存。
• 数据混洗与聚合的缓存区
当进行数据混洗操作时,Spark 会创建出一些中间缓存区来存储数据混洗的输出数据。这些缓存区用来存储聚合操作的中间结果,以及数据混洗操作中直接输出的部分缓存数据。
Spark 会尝试根据spark.shuffle.memoryFraction 限定这种缓存区内存占总内存的比例。
• 用户代码
Spark 可以执行任意的用户代码,所以用户的函数可以自行申请大量内存。例如,如果一个用户应用分配了巨大的数组或者其他对象,那这些都会占用总的内存。用户代码可
以访问JVM 堆空间中除分配给RDD 存储和数据混洗存储以外的全部剩余空间。


在默认情况下,Spark 会使用60%的空间来存储RDD,20% 存储数据混洗操作产生的数据,剩下的20% 留给用户程序。用户可以自行调节这些选项来追求更好的性能表现。如果
用户代码中分配了大量的对象,那么降低RDD 存储和数据混洗存储所占用的空间可以有效避免程序内存不足的情况。

原创粉丝点击