spark 是个大规模的计算引擎
spark-core
RDD基本概念
弹性分布式数据集(RDD),spark中的基本抽象,表示可以并行操作的不可变的分区元素集合。
5个主要属性
1.分区列表(a list partitions)
Spark RDD 是被分区的,每一个分区都会被一个计算任务(task)处理,分区数决定了并行计算的数量,RDD的并行度默认从父RDD传给子RDD。默认情况下,一个HDFS上的数据切分片就是一个 partition,RDD分片数决定了并行计算的力度,可以在创建RDD时指定RDD分片的个数,如果不指定分区数量,当RDD从集合创建时,则默认分区数量为该程序所分配的资源的CPU核数,如果时从HDFS文件创建,默认为文件的Block数。
2.每一个分区都有一个计算函数( a function for computing each split)
每个分区都会有计算函数,Spark的RDD计算函数时以分片为基本单位的,每个RDD都会实现,compute函数,对具体的切片进行计算。
3.依赖其他RDD的列表
spark的运行过程就是RDD之间的转换,因此,必须记录RDD之间的生成心关系(新RDD是由哪个或哪几个夫RDD生成),这就是所谓的依赖关系,这样既有助于阶段和任务的划分,也有助于在某个分区出错的时候,只需要重新计算与当前出错的分区有关的分区,而不需要计算所有的分区。
4.key-value数据类型的RDD分区器( a Partition for key- value RDDS)
RDD分区方式,这个属性指的是RDD的partitioner 函数(分片函数),分区函数就是将数据分配到指定的分区,这个目前实现了HashPartitioner和RangePartitioner,只有key-value的RDD才会有分片函数,否则为none。
5.计算每个分片的首选位置列表( a list of preferred locations to compute each split on)
spark 本身在进行任务调度时会尽可能的将任务分配到处理数据的数据块所在的具体位置