Spark内存管理
- 执行spark程序时spark集群会启动Drive和Executor两种JVM,前者为主控后者为计算执行进程
- 主要说明计算任务内存管理
堆内内存和堆外内存
堆内内存
- jvm虚拟机分配给Executor的内存,共享的堆内存
- Storage:缓存RDD和广播变量
- Execution:执行Shuffle占用的内存
- 剩余空间:Spark内部的对象实例和用户自定义的对象实例
- spark submit参数配置:
- –executor-memory 或者 spark.executor.memory
堆外内存
- 为了提高shuffle时的排序效率,引入堆外内存
- 堆外内存没有other区域,其他与堆内内存相同
统一内存管理机制
- 存储内存和执行内存动态占用内存空间
- other内存不会被占用
- 运行前划分Storage和Execution比例
- 双方空间都不足时,存储到磁盘,己方不足对方空余时,可借用对方空间
- Execution执行的内存空间被占用后,可让对方将占用部分存到磁盘,然后归还借用空间
- Storage内存被Execution占用之后,无法让对方归还,只能等执行结束释放