spark是通过借鉴Hadoop mapreduce发展而来,继承了其分布式并行计算的优点,并改进了mapreduce明显的缺陷,具体表现在以下几方面:
1.spark把中间计算结果存放在内存中,减少迭代过程中的数据落地,能够实现数据高效共享,迭代运算效率高。mapreduce中的计算中间结果是保存在磁盘上的,这样必然影响整体运行速度。
2.spark容错性高。spark支持DAG图的分布式并行计算(简单介绍以下spark DAG:即有向无环图,描述了任务间的先后依赖关系,spark中rdd经过若干次transform操作,由于transform操作是lazy的,因此,当rdd进行action操作时,rdd间的转换关系也会被提交上去,得到rdd内部的依赖关系,进而根据依赖,划分出不同的stage。),它引进rdd弹性分布式数据集的概念,它是分布在一组节点中的只读对象集合,如果数据集一部分数据丢失,则可以根据血统来对它们进行重建;另外在RDD计算时可以通过checkpoint来实现容错,checkpoint有两种方式,即checkpiont data 和logging the updates。
3.spark更加通用。hadoop只提供了map和reduce两种操作,spark提供的操作类型有很多,大致分为转换和行动操作两大类。转换操作包括:map,filter,flatmap,sample,groupbykey,reducebykey,union,join,cogroup,mapvalues,sort,partitionby等多种操作,行动操作包括:collect,reduce,lookup和save等操作
这里要注意:spark 操作实际分为四类:
a.创建操作:用于创建RDD。RDD创建只有两种方法,一种是读取外部文件和内存集合,另一种是通过transform转换操作生成。
b.转换操作:将RDD通过一定的操作转换成新的RDD。RDD的转换操作是惰性操作,它只是定义了一个新的RDD,并没有立即执行。
c.控制操作:进行RDD持久化,科技将RDD按不同的存储策略保存在磁盘或内存中,比如cache接口默认将RDD缓存在内存中。
d.行动操作:能够触发spark运行的操作,举个栗子,对RDD进行COLLECT就是行动操作。spark中的行动操作分为两类,一类的操作结果是变成scala集合或变量,另一类是将RDD保存到外部文件系统或数据库中。