Spark计算模型
Spark将数据(包括部分中间数据)放在内存,在内存中计算,用户将重复利用的数据缓存在内存,提高下次的计算效率,因此Spark尤其适合迭代型和交互型任务,Spark需要大量的内存,但性能可随机器数目呈多线性增长。
Spark程序模型
RDD:弹性分布式数据集
RDD操作起来与scala集合类型没有太大的差别,这就是Spark追求的目标,像编写单机程序一样编写分布式程序,但他们的数据和运行模型有很大的不同,用户需要具备更强的系统把控能力和分布式系统知识。
比如:
1.SparkContext中的textFile函数从hdfs读取日志文件,输出变量file
val file = sc.textFile(“hdfs://xxx”)
2.RDD中的filter函数过滤带“ERROR”的行,输出errors(一个RDD)
val errors = file.filter(line=>line.contains(“ERROR”))
3.RDD的count函数返回“ERROR”的行数:errors.count()
用户程序对RDD通过多个函数进行操作,将RDD进行转换。BlockManager管理RDD的物理分区,每个Block就是节点上对应的一个数据块,可以存储在内存或者磁盘。而RDD中的partition是一个逻辑数据块,对应相应的物理块Block。本质上一个RDD在代码中相当于是数据的一个元数据结构,存储着数据分区及其逻辑结构映射关系,存储着RDD之前的以来转换关系。
DRR简介
弹性分布式数据集
RDD的4种创建方式
1.从hadoop文件系统输入创建
2.从父RDD转换得到新的RDD
3.调用SparkContext方法的parallelize,将Driver上的数据集并行化,转化为分布式的RDD
4.更改RDD的持久性(persistence)例如cache()函数。默认RDD计算后会在内存清楚,通过cache函数将计算后的RDD缓存在内存中。
RDD的两种算子
对于RDD可以有两种计算操作算子:Transformation与Action
1.T:Transformation操作是延迟计算的,也就是说从一个RDD转换成另一个RDD的转换操作不是马上执行的,需要等到有Action操作时,才真正出发运行。
2.A:Action算子会出发Spark作业,并将数据输出到Spark系统
RDD的重要内部属性
1.分区列表
2.计算每个分片的函数
3.对父RDD的依赖列表
4.对key-value对数据类型RDD的分区器,控制分区策略和分区数
5.每个数据分区地址列表
Spark初识
最新推荐文章于 2024-09-05 11:23:14 发布