Spark的核心是RDD(Resilient Distributed Dataset),即弹性分布式数据集,属于一种分布式的内存系统数据集应用。Spark的主要优势来自RDD本身的特性,RDD能与其他系统兼容,可以导入外部内存系统的数据集,例如HDFS、HBase或其他Hadoop数据源。
10.1 RDD的特性
10.1.1 RDD的3种基本运算。
RDD运算内型 | 说明 |
---|---|
“转换”运算Transformation | ·RDD执行“转换”运算的结果,会产生另外一个RDD·RDD具有lazy特性,所以“转换”运算并不会立刻实际执行,等到执行“动作”运算才会实现执行 |
“动作”运算Action | ·RDD执行“动作”运算后不会产生另外一个RDD,而是会产生数值、数组或写入文件系统 ·RDD执行“动作”运算时会立刻实际执行,并连同之前的“转换”运算一起执行 |
“持久化”Persistence | 对于那些会重复使用的RDD,可以将RDD“持久化”在内存中作为后续使用,以提高执行性能 |
RDD通过“转换”运算可以得出新的RDD,但Spark会延迟这个“转换”动作的发生时间点。并不会马上执行,而是等到执行Action之后才会基于所有RDD关系来来执行转换。
RDD转换示意图
·输入数据,执行“转换1”运算产生RDD1,此时不会实际执行,只会记录操作命令。
·RDD1执行“转换2”运算产生RDD2,此时不会实际执行,只会记录操作命令。
·RDD2执行“转换3”运算产生RDD3,此时不会实际执行,只会记录操作命令。
·RDD3执行“转换4”运算产生RDD4,此时不会实际执行,只会记录操作命令。
·RDD4执行“动作1”运算,此时会实际执行:“转换1”+“转换2”+“转换3”+“转换4”+“动作1”,产生数据1。
··RDD4执行“动作2”运算,此时会实际执行:“转换1”+“转换2”+“转换3”+“转换4”+“动作2”,产生数据2。(如果之前已经执行了“动作1”运算,那么“转换1”+“转换2”已经实际执行完成,在此只会实际执行“转换4”+“动作2”,以节省运行时间)。
10.1.2 Lineage机制具备容错的特性
RDD本身具有Lineage机制。它会记录下每个RDD与其父代RDD之间的关系,还会记录通过什么操作才由父代RDD得到该消息的信息。
RD