基本介绍
Spark是UC Berkeley AMPlab推出的分布式计算框架,目前有替代mapreduce的趋势。
Spark使用scala语言开发,支持的策略开发语言有:scala、python、java。
Spark的整个生态系统称为伯克利数据分析栈(BDAS)。Spark是伯克利数据分析栈(BDAS)的计算核心,相当于电脑中的CPU。
Spark可以完全融入hadoop生态系统(比如支持Hive、HDFS、HBase数据源),它只是替代了其中的mapreduce的计算模式。
基于MapReduce情况下,一人计算作业会被切分成多个MapReduce任务,每个MapReduce使用HDFS作为中间结果的存储介质。而Spark可以支持除map和reduce以外的更多操作,这些操作间形成一个无环图,各个操作之间的数据都在内存中。
计算模型
基本概念
l Application:应用。可以认为是多次批量计算组合起来的过程,在物理上可以表现为你写的程序包+部署配置。应用的概念类似于计算机中的程序,它只是一个蓝本,尚没有运行起来。
l RDD:Resilient Distributed Datasets,弹性分布式数据集。RDD即是计算模型里的一个概念,也是你编程时用到的一种类。一个RDD可以认为是spark在执行分布式计算时的一批相同来源、相同结构、相同用途的数据集,这个数据集可能被切割成多个分区,分布在不同的机器上,无论如何,这个数据集被称为一个RDD。在编程时,RDD对象就对应了这个数据集,并且RDD对象被当作一个数据操作的基本单位。比如,对某个RDD对象进行map操作,其实就相当于将数据集中的每个分区的每一条数据进行了map映射。
l Partition:分区。一个RDD在物理上被切割成多个数据子集,分布在不同的机器上。每个数据子集叫一个分区。
l RDD Graph:RDD组成的DAG(有向无环图)。RDD是不可变的,一个RDD经过某种操作后,会生成一个新的RDD。这样说来,一个Application中的程序,其内容基本上都是对各种RDD的操作,从源RDD,经过各种计算,产生中间RDD,最后生成你想要的RDD并输出。这个过程中的各个RDD,会构成一个有向无环图。
l Lineage:血统。RDD这个概念本身包含了这种信息“由哪个父类RDD经过哪种操作得到”。所以某个RDD可以通过不断寻找父类,找到最原始的那个RDD。这条继承路径就认为是RDD的血统。
l Job:从Application和RDD Graph的概念可以知道,一个应用往往对应了一个RDD Graph。这个应用在准备被spark集群运行前,