RDD缓存学习
首先實(shí)現(xiàn)rdd緩存
準(zhǔn)備了500M的數(shù)據(jù) 10份,每份 100萬條,存在hdfs 中通過sc.textFile方法讀取
val rdd1 = sc.textFile("hdfs://mini1:9000/spark/input/visitlog").cache
在啟動spark集群模式時分配內(nèi)存2g,第一次分配1g 只緩存了40% 當(dāng)數(shù)據(jù)需要的內(nèi)存大于實(shí)際的內(nèi)存時spark會盡力的緩存
然后調(diào)用cache方法
rdd1.count
第二次調(diào)用rdd的count方法就顯示出差距了
?
默認(rèn)緩存策略是memory_only ??
/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)其他的緩存策略
object StorageLevel { //不緩存val NONE = new StorageLevel(false, false, false, false)//只往磁盤中緩存val DISK_ONLY = new StorageLevel(true, false, false, false)//磁盤中緩存兩份val DISK_ONLY_2 = new StorageLevel(true, false, false, false, 2)//放在內(nèi)存中val MEMORY_ONLY = new StorageLevel(false, true, false, true)//內(nèi)存中保存兩份,多個機(jī)器報存val MEMORY_ONLY_2 = new StorageLevel(false, true, false, true, 2)//報存一份到內(nèi)存,并且把數(shù)據(jù)序列化,序列化之后數(shù)據(jù)占用內(nèi)存變小,//但是序列化時需要消耗時間,時間換空間val MEMORY_ONLY_SER = new StorageLevel(false, true, false, false)// val MEMORY_ONLY_SER_2 = new StorageLevel(false, true, false, false, 2)//內(nèi)存和磁盤都保存val MEMORY_AND_DISK = new StorageLevel(true, true, false, true)val MEMORY_AND_DISK_2 = new StorageLevel(true, true, false, true, 2)val MEMORY_AND_DISK_SER = new StorageLevel(true, true, false, false)//內(nèi)存和磁盤都保存 序列化兩份val MEMORY_AND_DISK_SER_2 = new StorageLevel(true, true, false, false, 2)val OFF_HEAP = new StorageLevel(false, false, true, false)?
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: 如何在Linux中恢复一个删除了的文件
- 下一篇: 《ASP.NET MVC企业实战》(二)