1.spark是什么?
基于内存的快速、通用、可扩展的大数据分析计算引擎
2.spark计算模型
APPLICATION: 用户编写的Spark应用程序
JOB: 一个行动算子就算一个Job,可以理解为我们的程序里面遇到了行动算子,整个代码才会run起来。job可并行可串行。
STAGE: 一个job通常包含一个或多个stage;stage是按照rdd的宽窄依赖进行划分的。
stage可并行可串行。
RDD: 弹性分布式数据集,里面会存放数据来源(分区)、数据计算逻辑、RDD血缘,但并不会存放真正的计算结果,就像一条生产流水线一样,只有当行动算子触发了以后,流水线才启动。(如果想存放RDD的中间计算结果数据,可以做cache持久化,就是把计算结果缓存到内存或者磁盘中,这个我们在后面spark为什么执行如此之快中讲)
TASK: 最小的工作单元,它带着分区数据以及计算逻辑被送到计算节点上去
EXCURTOR: 简单理解为真正干活计算的。在每个Worker上为某应用启动的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上,每个任务都有各自独立的Executor
对应关系图:
3.spark的一些特性
3.1 计算效率高(和mapreduce放一起做对比)
a.缓存RDD
俗称RDD持久化,就是把一些RDD的计算结果缓存在内存/磁盘中,当需要再次使用的时候,就可以直接从内存/磁盘取数。
b.DAG计算模型
job->磁盘->job->磁盘
因为有DAG(有向无环图,简单来说就是了描述RDD之间的依赖,流水线工序;并且这种依赖只有一个前进方向),所以在一个job里面 可以实现多次shuffle,但是对于mapreduce,一个job只能有一次shuffle,所以在多shuffle的计算中,mapreduce相较于spark 会增加多次IO(从磁盘读写)
c.shuffle优化
mapreduce的shuffle会进行排序,spak不会。
d.调度模型
MapReduce采用了多进程模型,Spark采用了多线程模型。多线程更灵活,并且复用可以减少启动、关闭task所需要的开销,节省时间。
进程和线程的区别可见下图:
3.2 容错性高(和mapreduce放一起做对比)
1.可以将中间计算过程存在内存里 2.如果没有存,每个rdd会存操作记录以及血缘,哪个节点出错了就可以按照路线再重新计算一次。