Spark支持將數據集放置在集群的緩存中,以便於數據重用。
Spark緩存策略對應的類:
| class StorageLevel private( object StorageLevel { |
| useDisk_ | 是否使用磁盤 |
| useMemory_ | 是否使用內存 |
| deserialized_ | 是否進行反序列化(即原生方式,不序列化) |
| replication_ | 備份數目 |
序列化后的對象存放在內存中,占用的內存少,但是用時需要反序列化,會消耗CPU;
個人推薦:如果內存使用緊張但是CPU夠用時建議考慮使用序列化后緩存;或者是選擇性能更好的序列化工具。
可選用的存儲級別有如下:
| 存儲級別 | 描述 |
| MEMORY_ONLY |
將RDD 作為反序列化的的對象存儲JVM 中。如果RDD不能被內存裝下,一些分區將不會被緩存,並且在需要的時候被重新計算。
這是是默認的級別
|
| MEMORY_AND_DISK |
將RDD 作為反序列化的的對象存儲在JVM 中。如果RDD不能被與內存裝下,超出的分區將被保存在硬盤上,並且在需要時被讀取
|
| MEMORY_ONLY_SER |
將RDD 作為序列化的的對象進行存儲(每一分區占用一個字節數組)。
通常來說,這比將對象反序列化的空間利用率更高,尤其當使用fast serializer,但在讀取時會比較占用CPU
|
| MEMORY_AND_DISK_SER |
與MEMORY_ONLY_SER 相似,但是把超出內存的分區將存儲在硬盤上而不是在每次需要的時候重新計算
|
| DISK_ONLY | 只將RDD 分區存儲在硬盤上 |
| DISK_ONLY_2等帶2的 |
與上述的存儲級別一樣,但是將每一個分區都復制到兩個集群結點上
|
注意:
1)spark默認存儲策略為MEMORY_ONLY:只緩存到內存並且以原生方式存(反序列化)一個副本;
2)MEMORY_AND_DISK存儲級別在內存夠用時直接保存到內存中,只有當內存不足時,才會存儲到磁盤中。
詳細信息參見官方文檔:http://spark.apache.org/docs/latest/programming-guide.html
