大数据学习之spark—RDD操作、DAG依赖 shuffle

spark


spark: 集批处理,实时流处理,交互式查询,机器学习,图计算为一体

Spark与MapReduce的比较

	一个hadoop job 会进行多次的磁盘读写 会有一定的性能瓶颈
	spark 允许在内存中缓存输入输出,上一个job结果马上可以被下一个使用

1、RDD(Resilient Distributed Dataset):spark分布式的 内存抽象 --(弹性分布式数据集)。允许用户执行多个查询时显示将工作缓存在内存中,后续工作重用工作集,极大提升查询速度。
特性

	  ①容错机制	②分区机制,并行(分布式)的处理数据	③分区数可以灵活的更改。

针对RDD的操作:Transformation(变换)懒操作不会触发真正的RDD处理计算;Action(执行)触发RDD

见另一篇博文:RDD的操作

2、DAG(Directed Acyclic Graph)有向无环图,整个计算的流水线计算链条(RDD转换和动作生成RDD间的依赖关系)抽象为一个DAG。记录了RDD间的依赖关系(具体指的懒方法),通过依赖关系实现RDD容错。

2.1、依赖关系:
·窄依赖:父RDD分区被子RDD一个分区所依赖,一对一关系,没有Shuffle。
若DAG中存在多个连续的窄依赖,spark底层会执行流水线优化
·宽依赖:父RDD分区被子RDD多个分区所依赖,一对多关系,会产生shuffle(会将磁盘I/O),要把中间结果落地,
因为shuffle过程汇总数据可能很大,直接存内存可能会导致内存溢出,所以spark不完全基于内存。

2.2、shuffle概述
本质:数据汇总后重新分发的过程,因为数据量很大所以会不可避免的需将数据落磁盘的操作,降低程序性能,所以spark并不完全读内存而不读写磁盘,尽量避免,提高效率。
早期spark,shuffle会产生多个临时文件,多临时文件造成大量文件的同时读写,磁盘性能分摊效率不高,影响spark执行效率;
后续 (spark1.2.0)shuffle只产生一个文件,数据会经过排序再附加索引信息,提升性能。

2.3、stage
一个DAG会依据RDD间的依赖关系进行stage划分。以Action为基准,向前回溯,遇到宽依赖形成一个stage,窄依赖执行流水线优化

2.4、task
任务,一个分区对应一个task。一个stage是一组task的集合

猜你喜欢

转载自blog.csdn.net/qq_38973672/article/details/87118265