如何实现Spark Executor内存管理

发布时间:2021-12-17 10:49:50 作者:柒染
来源:亿速云 阅读:137

本篇文章为大家展示了如何实现Spark Executor内存管理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

前言

Spark 的内存管理是内存分布式引擎中的一个重要角色,了解内存管理机制和原理,才能更好地做优化。

内容

1、静态内存管理(Spark 1.6.x版本前的策略)

静态内存管理图示——堆内

如何实现Spark Executor内存管理
Unroll 的源码参考:https://github.com/apache/spark/blob/branch-1.6/core/src/main/scala/org/apache/spark/storage/MemoryStore.scala#L249

静态内存管理图示——堆外

2、统一内存管理(Spark 1.6.x以后的策略)

统一内存管理图示——堆内
如何实现Spark Executor内存管理

统一内存管理图示——堆外

其中最重要的优化在于动态占用机制,其规则如下: 1\设定基本的存储内存和执行内存区域(spark.storage.storageFraction 参数),该设定确定了双方各自拥有的空间的范围 双方的空间都不足时,则存储到硬盘;若己方空间不足而对方空余时,可借用对方的空间;(存储空间不足是指不足以放下一个完整的 Block) 2\执行内存的空间被对方占用后,可让对方将占用的部分转存到硬盘,然后"归还"借用的空间 3\存储内存的空间被对方占用后,无法让对方"归还",因为需要考虑 Shuffle 过程中的很多因素,实现起来较为复杂

动态占用机制图示
如何实现Spark Executor内存管理

凭借统一内存管理机制,Spark 在一定程度上提高了堆内和堆外内存资源的利用率,降低了开发者维护 Spark 内存的难度,但并不意味着开发者可以高枕无忧。譬如,所以如果存储内存的 空间太大 或者说 缓存的数据 过多,反而会导致频繁的全量垃圾回收,降低任务执行时的性能,因为缓存的 RDD 数据通常都是长期驻留内存的。所以要想充分发挥 Spark 的性能,需要开发者进一步了解存储内存和执行内存各自的管理方式和实现原理。

统一内存管理还可以简化
(1)Reserved Memory

(2)User Memory

(3)Spark Memory

上述内容就是如何实现Spark Executor内存管理,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. spark 初体验
  2. 如何解析Apache Spark 统一内存管理模型

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spark executor

上一篇:openstack pike版如何使用ceph作后端存储

下一篇:python匿名函数怎么创建

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》