文章目录

1 Spark内存模型
Spark在一个Executor的内存分为三块,
1. 一块是execution内存
2. 一块是Storge 内存
3. 一块是其他内存
- 执行内存是执行内存,加入,聚合都是在这部分内存中执行.shuffle的数据也会先缓存在这个内存中,满了再写入磁盘,能减少IO,其实地图过程也是在这个内存中执行的。
- Storge内存是存储broadcast,cache,persist数据的地方
- 其他内存是程序执行时预留给自己的内存(执行代码的时候使用)
execution和Storage是Spark Executor中的内存大户,other占用内存相对较少很多。在Spark-1.6.0以前的版本,execution和Storage的内存是固定分配的,使用的参数spark.shuffle.memoryFraction(execution内存占用Executor总内存大小的的0.2默认值)和spark.storage.memoryFraction(Storage内存占Executor内存的0.6),因为1。6。0以前这两块内存是相互隔离的,这导致了Executor的内存利用率不高,而且需要根据Application的具体情况,使用者自己可以调节这两个参数才能优化Spark的内存使用。在Spar