RDD的5大特性

worker里有很多Excutor,真正完成计算的是Excutor,Excutor计算都是在内存进行计算,
Excutor里面有partitioner,partitioner里面的数据如果内存足够大的话放到内存中,它是一点一点读的
RDD是分布式数据集,所说RDD就是这个,
RDD有5个特点:
1.a list of partiotioner有很多个partiotioner(这里有3个partiotioner),可以明确的说,
一个分区在一台机器上,一个分区其实就是放在一台机器的内存上,

一台机器上可以有多个分区。

用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的CPU Core的数目。每个分配的存储是由BlockManager实现的,每个分区都会被逻辑映射成BlockManager的一个Block,而这个Block会被一个Task负责计算。



2.a function for partiotioner一个函数作用在一个分区上。
比如说一个分区有1,2,3 在rdd1.map(_*10),把RDD里面的每一个元素取出来乘以10,每个分片都应用这个map的函数


3.RDD之间有一系列的依赖
rdd1.map(_*10).flatMap(..).map(..).reduceByKey(...)
构建成为DAG,这个DAG会构造成很多个阶段,这些阶段叫做stage,RDDstage之间会有依赖关系,后面根据前面的依赖关系来构建,如果前面的数据丢了,它会记住前面的依赖,从前面进行重新恢复。每一个算子都会产生新的RDD.
textFile 与flatMap会产生两个RDD.


4.分区器hash & Integer.Max % partiotioner 决定数据到哪个分区里面,可选,这个RDD是key-value 的时候才能有


5.最佳位置。数据在哪台机器上,任务就启在哪个机器上,数据在本地上,不用走网络。不过数据进行最后汇总的时候就要走网络。(hdfs file的block块)

你可能感兴趣的:(Spark)