Spark内存参数的理解
最近开始使用 pyspark ,对于 executor 中的内存参数有些之前没注意到的地方,查看资料后,这里作下记录。
1. spark 内存划分
Spark 的内存分为:
- JVM 内存
- JVM之外的内存
JVM内部的内存分为4部分:
- 存储内存-此内存用于spark缓存数据、广播变量等;
- 执行内存-此内存用于存储执行spark任务期间所需的数据(主要是shuffle阶段);
- 用户内存-此内存用于用户目的。您可以在这里存储自定义数据结构、udf、UDAFs等;
- 保留内存-此内存用于spark用途,从spark 1.6起硬编码为300MB。
JVM之外的内存分为两部分:
- 堆外内存—JVM之外的内存,但用于JVM或用于项目管理;
- 外部进程内存-这个内存是特定于SparkR或PythonR的,由驻留在JVM之外的进程使用。
2. 参数详解
spark.executor.memory
影响 JVM 内存,是 Spark 为 executor 分配的内存,包含了 存储内存、执行内存、
用户内存、保留内存。
spark.memory.fraction
影响 JVM 内存,默认值为0.6。是 executor 中为 存储内存、执行内存 分配内存大小比例
(spark.executor.memory-保留内存(300M))*0.6 = 存储内存 执行内存
(spark.executor.memory-保留内存(300M))*0.4 = 用户内存
spark.memory.storageFraction
影响 JVM 内存,默认值为0.5。存储内存、执行内存总和中,存储内存所占的比重,spark 现在
使用的是动态内存管理,在内存空闲时,存储内存、执行内存是可以相互抢占的;在内存使用不足
时,如果存储内存抢占了执行内存,执行内存是可以驱逐存储内存的,反之不行。
这个参数控制着在在内存使用不足时,存储内存可以保留的空间大小。
spark.executor.memoryOverhead
影响 堆外 内存,默认值为 executorMemory * 0.10, with minimum of 384。
Spark的shuffle部分使用了netty框架进行网络传输,但netty会申请堆外内存缓存
(PooledByteBufAllocator ,AbstractByteBufAllocator);Shuffle时,每个Reduce
都需要获取每个map对应的输出,当一个reduce需要获取的一个map数据比较大(比如1G),这时
候就会申请一个1G的堆外内存,而堆外内存是有限制的,这时候就出现了堆外内存溢出
spark.python.worker.memory
影响 外部进程内存 内存,默认值为 512M 。
JVM进程和Python进程通过py4J桥相互通信,py4J桥公开JVM和Python之间的对象。所以
spark.python.worker.memory在将对象溢出到磁盘之前,控制py4J可以占用多少内存来
创建对象。
spark.executor.pyspark.memory
影响 外部进程内存 内存。
限制 每个executor 中 python 所使用的内存大小
未完待续。。。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgacabk
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24