技术分析:火花统一内存管理

spark的内存管理自1.6.0以来发生了变化。最初的内存管理是由StaticMemoryManager实现的,现在称为Legacy。在1.5.x和1.6.0中运行相同代码的行为是不同的。为了与Legacy兼容,可以通过默认关闭的spark . memory . UseGacyMode来设置。

1.6.0的统一内存管理如下:

雁鸣技术分析


spark-memory-management-1 . 6 . 0

主要由三部分组成:

1保留内存

这部分内存是为系统使用而保留的,是固定的在1.6.0中,默认值为300 MB(保留_系统_内存_字节= 300 * 1024 * 1024)。除了spark和spark.testing.reservedMemory被重新编译之外,这部分内存不计入spark执行和存储中。保留内存无法更改。不建议在实际操作环境中使用spark.testing.reservedMemory。它用于存储火花内部对象和限制JVM的大小。如果执行器的大小小于1.5 *保留内存= 450兆字节,将报告“请使用大头大小”的错误。源代码如下

雁鸣技术分析

2用户内存

分配Spark内存的剩余内存,用户可以根据需要使用您可以存储RDD转换所需的数据结构,例如,重写spark聚合,使用mapPartition转换,并通过哈希表实现聚合,从而使用用户内存。在1.6.0中,计算方法是(“Java堆”-保留内存”)* (1.0-Spark)。内存。碎片),默认值是(“Java堆”-300兆)* 0.25,例如,4GB堆大小,那么用户内存大小是949兆存储的数据量是由用户决定的,因此必须遵守这个界限,否则将导致OOM。

3火花存储器

计算为(“Java堆”-保留存储器”)*火花。内存分数,默认为(“Java堆”-300兆字节)* 1 . 6 . 0中的0.75例如,如果推送的大小是4GB,那么火花存储器是2847MB。火花存储器分为存储存储器和执行存储器。这两个界限由spark.memory.storageFraction设置,默认值为0.5然而,这两个部分可以动态变化,也可以相互借鉴。如果一方用完了,它可以向另一方借。让我们先看看这两个部分是如何使用的。

存储内存用于存储spark缓存数据。它还可以用作临时空间,将序列化的魅兰广播变量存储为缓存块。然而,应该注意的是,这是魅兰区块的源代码。如果没有足够的内存,RolledBlock将存储在驱动程序端。大多数广播变量存储在内存和磁盘级别。

执行内存存储执行Spark任务所需的对象,例如,将映射中间数据存储在随机存储中,将哈希表存储在哈希聚合中。如果没有足够的内存,这个空间也允许溢出到磁盘。

执行内存不能消除阻塞,否则在执行过程中会失败。如果找不到块存储内存中的内容可以删除在两种情况下,执行内存可以从存储内存借用空间:

存储内存和可用空间

存储内存大于初始化时的空间(Spark Memory * Spark . Memory . Storage fragment =(“Java堆”-保留内存”)* Spark . Memory . fragment * Spark . Memory . Storage fragment)只有当执行内存有可用空间时,才能借用存储内存。


僵尸不是韩剧中唯一的大爆炸青春令人心痛的杰作:北雁北飞
热门推荐
  • 尖头粗跟鞋欧美_欧美粗跟鞋
  • 龙珠z剧场版神与神_龙珠z剧场版神与神国语版
  • 盐城招商银行地址_浦发银行网点
  • 注册小规模公司需要_如何注册小规模公司
  • 若羌红枣和田大枣_中国十大名枣排名
  • 非诚勿扰江涛是哪一期_非诚勿扰姜涛视频
  • 牛奶配送软件哪个好_西安鲜奶配送哪个好
  • 卡路里舞蹈视频教学完整版_无归舞蹈视频教学完整
  • 用冷水敷脸有什么好处_冷毛巾敷脸有什么好处
  • 雷霆世纪主机缩水吗?_主机缩水什么意思
  • 淘手游交易平台下载_淘手游客户端
  • 大夏纪小说_博耀新书 大夏纪
  • 桔子贵还是芦柑贵_芦柑是橘子还是橙子
  • 泰国人是什么人种_蓝血人种
  • come过去分词
  • 郑州环境好的特色餐厅_郑州特色主题餐厅
  • 格纹分类_格纹分为哪几种格纹
  • 红色纹身凸起用什么药_外阴瘙痒有凸起颗粒用什么药
  • 去澳大利亚工作签证_澳大利亚工作签证类型
  • 电动汽车增程器厂家_增程电动汽车厂家