组件概述
Driver
- 一个进程,运行着编写的Spark程序。Driver是主进程,有main函数。Driver启动后,向Master发送请求,进行注册申请资源。
- Executor启动后,会向Driver反注册,之后执行Spark程序,读取数据源,创建RDD生成Stage,提交task到Executor
Master
进程,主要负责资源的调度和分配、集群的监控
Worker
进程,
- 存储RDD的某个或者某个partition
- 启动其他进程和线程,对RDD上的partition处理和计算
Executor
进程,
一个Executor执行多个task,多个Executor可以并行执行,最大Executor为集群的可以CPU核数-1
Task
线程,具体的Spark任务是在Task上执行的,某些并行的算子,有多少个分区就有多少个Task,但是有些算子像take这样的只有一个task。
完整的流程
- Driver进程启动后会像Master注册
- Master接收Driver的请求之后,发送请求到Worker,进行资源分配和调度,也就是Executor的分配
- Worker接收到Master请求,启动Executor
- Executor启动之后,会向Driver反注册
- Driver反注册好Executor之后会正式执行Spark程序,读取数据源创建RDD
- 数据源被读取到多个Worker之后形成RDD
- 在Worker生成RDD后,Worker会根据对RDD定义的操作,提交相应数量的Task到Executor
Spark比Hadoop快多少倍
Spark比Hadoop快的原因主要是:
- task启动时间快,Spark是fork出线程,而MR是启动新进程
- 更快的shuffle,Spark只有在shuffle时才将数据放在磁盘,而MR不是
- 更快的工作流,MR工作流是由很多MR作业组成,他们之间的数据交互需要持久化到磁盘才行,而Spark支持DAG即pipeline,在没有shuffle时完全可以不把数据放磁盘
- 缓存,spark的缓存更高效,可以将数据缓存到内存
在比较短的作业中,能快上100倍,但是在真实生产环境下,一般只会快2~3倍。
Spark架构原理 https://zhuanlan.zhihu.com/p/50416326