Spark学习笔记(2) —— Spark RDD
Spark RDD
四类操作
- 创建操作: 用于RDD创建工作,RDD创建只有两种方法,中是来自于内存集合和外部存储系统,另一种是通过转换操作生成的RDD
- 转换操作:将RDD通过一定的操作变换成新的RDD,比如HadoopRDD可以使用map操作变换为MappedRDD,RDD的转换操作是惰性操作。
- 控制操作:进行RDD出九华,可以让RDD按不同的存储侧率保存在磁盘和内存中,比如cache接口默认将RDD缓存在内存中。
- 行动操作:能够出发Spark运行的操作,李璐,对RDD进行collect就是行动操作。Spark中行动操作。
RDD的实现
- 作业调度
当对RDD执行转换操作是,调度器会根据RDD的血统来构建有若干调度阶段组成的有向无环图,每个调度阶段包含尽可能多的连续窄依赖转换。调度器按照有向无环图顺序进行计算,并最总得到目标RDD。
- 解析器集成
Scala
- 内存管理
Spark 提供了3中持久化RDD的存储策略:未序列化Java对象存在内存中、序列化的数据存于内存中已经存储在磁盘中。第一个选项的性能是最优的,因为可以直接访问在Java虚拟机内存里的RDD对象;在空间有限的情况下,第二种方式可以让用户采用比Java对象更有效的内存组织方式,但代价是降低了性能;第三种策略使用于RDD太大的情形,每次重新计算该RDD会带来额外的资源开销。
对于内存使用LRU回收算法进行管理,当计算得到一个新的RDD分区,但没有足够的空间来存储时,系统会从最近最少使用的RDD中回收一个分区的空间,除非新加的RDD分区是这个RDD对应的分区,在这种情况下则会保留这个最少使用的RDD,避免多次调入调出数据。
- 检查点支持
尽管血统可以用于错误后RDD的恢复,但是对于很长的血统的RDD来说,这样的恢复耗时较长,所以需要通过检查点操作保存到外部存储中。
- 多用户管理
RDD模型将计算分解为多个相互独立的细粒度任务,这使得它在多用户集群能够支持多种资源共享算法。
- RDD依赖关系
RDD中将依赖划分成了两种类型:窄依赖和宽依赖。
窄依赖是指每个父RDD的分区都之多被一个子RDD的分区使用(一对一), 宽依赖是多个子RDD的分区依赖一个父RDD的分区(多对一)