spark介绍
spark是由加州伯克利大学的AMP实验室开发的一个通用的并行计算框架,2009年发布,2010年开源,是一个针对大规模数据处理的通用的分析引擎。spark也是基于map&reduce算法实现的一个分布式计算框架。
速度
从官网的介绍可以看出,spark的速度是mapreduce的100倍以上,即使是使用纯磁盘存储,速度也是mapreduce的10倍以上。
- spark快的主要原因是编程模型的改变,传统mapreduce是将reduce的结果存储至hdfs上,reduce阶段再从hdfs中读取数据进行处理;而spar是采用pipeline的模式进行数据处理,从存储介质中读取的每一条数据都会以管道的形式经由每个流程最后进行存储,这个处理过程全程都是在内存中进行的,虽然是使用的内存,但是不会占用过多内存资源,相比mapreduce的处理模式,快是肯定的。
- spark的在stage的shuffle过程中,在上个stage处理后数据存储也是可以使用内存的,spark的存储模式有很多种,总的来说就是内存、内存+磁盘、磁盘,当数据存储在内存中时,那么shuffle的速度将大大提高。
- spark对迭代式计算的完美支持,支持交互式查询,一个RDD可以被多个子RDD使用,那么这样就避免了mapreduce每个task都必须从存储介质中读取数据,即便所需要的数据和上一个任务的数据一样。这样spark就避免了多次和远程存储系统进行交互,比如hdfs,这样就大大提高了执行效率,也更下符合编程复用思维。
概念
- RDD(resillient distribute dataset)弹性分布式数据集,并不存储数据,只是一个数据处理的逻辑概念。
- Task:最终执行的任务单元,每一个Action都会生成一个task,Task分为MapShuffleTask和ResultTask。一个Stage的finaltask就是ResultTask,其余的都是MapShuffleTask。
- Job用户提交的作业,一个Job可以由多个Task组成。
- 根据DAG从后往前递归查找,遇到shuffle的操作,都要进行切分行程一个新的Stage,Stage之前是串行执行的,同一个Stage是并行执行的流水线作业。
- Partition数据分区,一个KV的RDD是通过Partition进行划分分区的。
- NarrowDependency窄依赖,子RDD依赖于父RDD的固定分区。包括OneToOneDependency和RangeDependency。
- ShuffleDependency宽依赖,RDD依赖于父RDD的所有分区。
- DAG有向无环图,从任意点开始经由有向的路径都无法回到该点,形成了一个依赖关系图,因为RDD要么从数据资源中产生,要么从其他RDD产生。
官网
http://spark.apache.org/