spark基本概念与运行架构
Apache Spark是一个分布式计算框架,旨在简化运行于计算机集群上的并行程序的编写。
RDD:弹性分布式数据集(Resilient Distributed Dataset)是分布式内存的一个抽象概念,提供了一个高度受限的共享内存模型。一个RDD包含多个分区(Partition)。
DAG:有向无环图(Directed Acyclic Graph)反应RDD之间的依赖关系。
Executor:运行在工作节点(WorkNode)的一个进程,负责运行Task。
Application:用户编写的Spark程序。
Task:运行在Executor上的工作单元。
Job:一个Job包含多个RDD及作用于相应RDD上的各种操作。
Stage:是Job的基本调度单位,一个Job会分为多组Task,每组Task被称为Stage,或者也被称为TaskSet,代表了一组由关联的、相互之间没有shuffle依赖关系的任务组成的任务集。
与MapReduce相比的优势:
- 利用多线程来执行具体的任务,减少任务的启动开销
- Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,减少IO开销
- 为应用构建起基本的运行环境,即由Driver创建一个SparkContext进行资源的申请、任务的分配和监控。
- 资源管理器为Executor分配资源,并Executor启动进程。
- SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理;Executor向SparkContext申请Task,TaskScheduler将Task发放给Executor运行并提供应用程序代码。
- Task在Executor上运行把执行结果反馈给TaskSchedulor,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源。
Spark运行架构特点:
- 每个Application都有自己专属的Executor进程,并且该进程在Application运行期间一直驻留。Executor进程以多线程的方式运行Task。
- Spark运行过程与资源管理器无关,只要能够获取Executor进程并保存通信即可。
- Task采用数据本地性和推测执行等优化机制。
(厦门大学大数据公开课笔记)