2、分析 先给出相关的参数(目前所在平台默认参数): spark.executor.memory=8G spark.executor.memoryOverhead=6144(6G) spark.memory.fraction...jvm堆内的内存分为四个部分(spark.memory.fraction=0.6): reservedMemory:预留内存300M,用于保障spark正常运行 other memory:用于spark...spark.executor.memoryOverhead=6144(6G) 有点浪费 最后测试参数: spark.executor.memory=12G spark.executor.memoryOverhead=3072(3G) set spark.memory.fraction...=0.75 最合适 其中spark.memory.fraction 不能设置太高,测试时,要为othermemory留一些富裕内存,因为spark内存统计信息收集是有延迟的,如果该值过大,且spill较重情况下
今天,星球里有个妹子问了一个问题,问题出自前面的一篇文章: spark 内存,GC及数据结构调优 其中有段话:在gc的统计信息中,如果老年代接近满了, 减少用于缓存的内存(通过减小spark.memory.Fraction...M和R的计算如下: 1),spark.memory.fraction将M的大小表示为(JVM堆空间 - 300MB) 的一部分(默认为0.75,新版本如spark2.2改为0.6)。...然后就会明白,假如我们单纯的减少spark.memory.storageFraction是行不通的,因为存储内存可以占用执行内存进行缓存,缓解不了老年代被吃满的状况,所以只能调整spark.memory.fraction
} val usableMemory = systemMemory - reservedMemory val memoryFraction = conf.getDouble("spark.memory.fraction...", 0.75) //< 最终 execution 和 storage 的可用内存之和为 (JVM最大可用内存 - 系统预留内存) * spark.memory.fraction (usableMemory...* memoryFraction).toLong } 从以上代码及注释我们可以看出,最终 execution 和 storage 的可用内存之和为 (JVM最大可用内存 - 系统预留内存) * spark.memory.fraction...UnifiedMemoryManager 时: maxMemory 即 execution 和 storage 能共用的内存总和为 getMaxMemory(conf),即 (JVM最大可用内存 - 系统预留内存) * spark.memory.fraction
控制了堆的大小 spark.yarn.executor.memoryOverhead 控制堆外内存,默认值(384MB, 0.07 * spark.executor.memory),该值一般偏小,需要调大 spark.memory.fraction
如果需要更加精确的控制内存分 配,可以按照如下思路: spark.memory.fraction= (估算 storage 内存 + 估算 Execution 内存) / (估算...估算 storage 内存 + 估算 Execution 内存) 代入公式计算: Storage 堆内内存 =(spark.executor.memory – 300MB)*spark.memory.fraction...*spark.memory.storageFraction Execution 堆内内存 = (spark.executor.memory – 300MB)*spark.memory.fraction
} val usableMemory = systemMemory - reservedMemory val memoryFraction = conf.getDouble("spark.memory.fraction...spark.memory.fraction配置项指定了统一内存能实际利用的可用内存比例,默认值为0.6(60%),最终返回可用内存与spark.memory.fraction的乘积。
的总内存大小小于 450M,则会抛出异常 storage、execution 安全系数外的内存:大小为 (heap space - RESERVED_SYSTEM_MEMORY_BYTES)*(1 - spark.memory.fraction...space - 300M)* 0.4 storage + execution:storage、execution 内存之和又叫 usableMemory,总大小为 (heap space - 300) * spark.memory.fraction...,spark.memory.fraction 默认为 0.6。...maxMemory 为 (jvm space - 300M)* spark.memory.fraction,如果你还记得的话,这在文章最开始的时候有介绍 如果 MemoryMode 是 OFF_HEAP...spark.memory.fraction:如果 application spill 或踢除 block 发生的频率过高(可通过日志观察),可以适当调大该值,这样 execution 和 storage
1.先看webUI具体运行所用的内存大小,配置spark.memory.storageFraction(Storage所占系统内存的比例) 在配置spark.memory.fraction(统一内存占整个内存的大小
作业反复崩溃,无法运行,故手动设置这个参数,到至少1G(1024M),甚至2G、4G spark.shuffle.memoryFraction 此参数属于spark静态内存模型中的参数,统一内存模型中不再生效 spark.memory.fraction...默认是0.6,即Spark存储内存与执行内存总共占用Executor内存的60%,一般不建议修改 spark.memory.storageFraction 默认是0.5,即Spark存储内存与执行内存各占spark.memory.fraction
Executor memory,也就是Executor可用内存上限 spark.memory.offHeap.enabled 堆外内存启用开关 spark.memory.offHeap.size 指定堆外内存大小 spark.memory.fraction
虽然有两个相关的配置,但由于默认值已适用于大多数情况,一般用户是不需要调整这两个参数的: spark.memory.fraction 代表统一共享区域M占Java堆内存-300MB的比例(默认是0.6)...spark.memory.fraction 的值应满足JVM老年代的堆空间大小。有关详细信息,请参考下面关于高级GC调优的讨论。...在打印的GC统计信息中,如果发现年老代将要满了,则通过降低spark.memory.fraction来减少用于缓存的内存占用;缓存更少的对象比降低task的执行速度要更好。或者,考虑减少年轻代的大小。...如果没有设置-Xmn的值,尝试盖面JVM的NewRatio参数的值,许多JVM将这个参数的默认值设为2,这表明年老代占整个堆空间的2/3,它应该足够大,以超过spark.memory.fraction的值
2到5倍的空间 分解一个job之中的transformation 尽量避免在一个transformation中处理所有的逻辑, 尽量分解成map, filter等之类的操作,这样程序会更容易理解 调低spark.memory.fraction
以上图解中,参数说明如下: 参数spark.memory.fraction在Spark 1.6版本中默认0.75,即Spark Memory(Execution Memory + Storage Memory
jvm堆内的内存分为四个部分(spark.memory.fraction=0.6) reservedMemory:预留内存300M,用于保障spark正常运行 other memory:用于spark内部的一些元数据
统一内存管理图示——堆内 spark.memory.fraction 堆内的存储内存和执行内存总共所占的比例,默认0.6 spark.storage.storageFraction
HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/hoodie-heapdump.hprof OutOfMemory错误:如果出现OOM错误,则可尝试通过如下配置处理:spark.memory.fraction
0.75可以通过 新参数 spark.memory.fraction 设置。
Spark虽然不可以精准的对堆内存进行控制,但是通过决定是否要在储存的内存里面缓存新的RDD,是否为新的任务分配执行内存,也可以提高内存的利用率,相关的参数配置如下: spark.memory.fraction...spark.memory.storageFraction 更改参数配置spark.memory.fraction可调整storage+executor总共占内存的百分比,更改配置spark.memory.storageFraction
领取专属 10元无门槛券
手把手带您无忧上云