1、Spark RDD概念
RDD即弹性分布式数据集,有容错机制并可以被并行操作的元素集合,具有只读、分区、容错、高效、无需物化、可以缓存、RDD依赖等特征。RDD只是数据集的抽象,分区内部并不会存储具体的数据。
2、Spark RDD分类
1)并行集合
接收一个已经存在的Scala集合,然后进行各种并行计算。
并行化集合是通过调用SparkContext的parallelize方法,在一个已经存在的Scala集合上创建(一个Seq对象)。集合的对象将会被拷贝,创建出一个可以被并行操作的分布式数据集。
2)Hadoop数据集
Spark可以将任何Hadoop所支持的存储资源转化成RDD,只要文件系统是HDFS,或者Hadoop支持的任意存储系统即可,如本地文件(需要网络文件系统,所有的节点都必须能访问到)、HDFS、Cassandra、HBase、Amazon S3等,Spark支持文本文件、SequenceFiles和任何Hadoop InputFormat格式。
此两种类型的RDD都可以通过相同的方式进行操作,从而获得子RDD等一系列拓展,形成lineage血统关系图。
3、Spark RDD算子
1)Transformation
不触发提交作业,完成作业中间处理过程。
[1]Value数据类型
输入分区与输出分区一对一型:map、flatMap、mapPartitions、glom
输入分区与输出分区多对一型:union、cartesian
输入分区与输出分区一对多型:groupBy
输出分区为输入分区子集型:filter、distinct、subtract、sample、takeSample
Cache型:cache、persist
[2]Key-Value数据类型
一对一:mapValues
聚集:combineByKey、reduceByKey、partitionBy、cogroup
连接:join、leftOutJoin、rightOutJoin
2)Action
会触发SparkContext提交Job作业。
无输出类型:foreach
HDFS类型:saveAsTextFile、saveAsObjectFile
Scala类型:collect、collectAsMap、reduceByKeyLocally、lookup、count、top、reduce、fold、aggregate
4、Spark RDD机制
1)依赖机制
RDD可以相互依赖。
若RDD的每个分区最多只能被一个Child RDD的一个分区使用,则称之为narrow dependency;若多个Child RDD分区都可以依赖,则称之为wide dependency。
不同操作依据其特性,可能会产生不同的依赖,例如map操作会产生narrow dep,而join操作则产生wide dep。
2)分区机制
【后续补充】
3)缓存机制
Spark可以使用persist和cache方法将任意RDD缓存到内存、磁盘文件系统中。
缓存是容错的,如果一个RDD分片丢失,可以通过构建它的transformation自动重构。
被缓存的RDD被使用时,存取速度会大大提速。
一般的excutor内存60%做cache,剩下的40%做task。