Spark之Executors memory空间分配

Executors


Spark executor internals:

Spark之Executors memory空间分配

每个执行器都有一个executor JVM, 存储RDD分区, 缓存RDD分区,运行内部线程。

如果内核数量超过了任务所需的数量,那么JVM中也会有空闲的内核。

Executor memory management


Spark之Executors memory空间分配

Spark之Executors memory空间分配

Spark之Executors memory空间分配

 Spark之Executors memory空间分配

其中最重要的优化在于动态占用机制,其规则如下:

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

Spark之Executors memory空间分配

Spark之Executors memory空间分配