Spark1.6.+ - 之内存管理Memory-Manage

Spark1.6.+ - 之内存管理

1、前言

在Spark1.6.+及以后的版本就引入了用户自定义的内存管理模型,但是是粗粒度的内存管理模型。

总的来说,Spark的内存管理虽然没有做到Flink那么细粒度,但是也已经足够用于对内存进行优化了。

Spark的每个运行时组件都是运行在一个独立的container中,这个container的启动内存由以下4个主要的大的内存配置进行确定,我们按照executor的内存单独来看,如下!~

  • spark.executor.memory (heap size)
    • 这个是运行executor进程的内存
  • spark.executor.memoryOverhead (overhead)
    • 容器给executor进程运行预留的额外内存开销
  • spark.memory.offHeap.size (off-heap)
    • executor运行的堆外内存、不受JVM GC的影响,默认不开启
  • spark.executor.pyspark.memory (not set,默认按MB除非指定其它的单位)
    • 运行pyspark的内存,默认没有设置

TOTAL CONTAINER MEMORY = spark.executor.memory + spark.executor.memoryOverhead + spark.memory.offHeap.size + spark.executor.pyspark.memory

2、内存配置详解

spark.executor.memory

# 该内存通过 --executor-memory 进行配置,是运行executor进程的总JVM heap

# 1、spark.executor.memory
	executor运行进程的total heap size
	spark.executor.memory = spark.memory.fraction + other reversed memory
# 2、spark.memory.fraction
	默认 spark.memory.fraction = spark.executor.memory * 0.6
	其它0.4是给用户的数据结构、内部的spark元数据、防止OOM的安全保障预留的一个内存空间

# 3、spark.memory.storageFraction
	默认 spark.memory.storageFraction = spark.memory.fraction * 0.5,用来存储从外部系统读取的数据块、缓存RDD数据等
	另外还有execution memory = spark.memory.fraction * 0.5,用来存储在执行task过程中的中间数据,如网络buffer等

spark.executor.memoryOverhead

# spark.executor.memoryOverhead (from spark-2.3.0引入)
	默认spark.executor.memoryOverhead = max(0.1 * spark.executor.memory,384MB),这是一块除了heap内存之外分配给每个executor的额外的内存区域,也是保证应用运行可靠的一个内存区域。

spark.memory.offHeap.size

# spark.memory.offHeap.size (默认不开启,默认按照byte为单位,如果想使用g\m,可以指定2g\2048m)
	如果我们要引入堆外内存我们需要开启:spark.memory.offHeap.enabled=true
	且spark.memory.offHeap.size必须在此时设置成正数,如果整个executor total消费内存要满足一个标准,那么在引入offheap的同时就必须相应减少heap内存(spark.executor.memory)

spark.executor.pyspark.memory

# spark.executor.pyspark.memory
	默认没有设置,只有在又pyspark应用的时候需要设置,否则会增大container的内存占用,别的应用也占用不到该资源
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值