Application
指的是用户编写的Spark应用程序,包含了含有一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码。
Driver
运行Application的main函数并创建SparkContext,SparkContext的目的是为了准备Spark应用程序的运行环境。SparkContext负责资源的申请、任务分配和监控等。当Executor运行结束后,Driver负责关闭SparkContext。
Executor
运行在Worker节点上的一个进程,该进程负责运行某些Task,并且负责将数据存放在内存或磁盘中。在Spark On Yarn模式下,其进程名称为CoarseGrainedExecutorBackend。一个CoarseGrainedExecutorBackend进程有且只有一个executor对象,它持有一个线程池,每个线程可以执行一个Task。
Cluster Manager
指的是在集群上获取资源的外部服务,目前有三种:
1) Standalone:Spark原生的资源管理器,由Master负责资源分配。
2) Apache Mesos:与Hadoop MapReduce兼容性良好的一种资源调度框架。
3) Hadoop Yarn:主要指Yarn中的ResourceManager。
Worker
集群中任何可以运行Application代码的节点。在Standalone模式中指的是通过slave文件配置的Worker节点,在Spark On Yarn模式中指的是NodeManager节点。
RDD(弹性分布式数据集)
Spark基本计算单元,是Spark最核心的东西。表示已被分区、被序列化、不可变的、有容错机制的、能被并行操作的数据集合。
Operation
作用于RDD的各种操作分为transformation和action。
Job
一个Application可以产生多个Job,其中Job由Spark Action触发产生。每个Job包含多个Task组成的并行计算。
Stage
每个Job会拆分为多个Task,作为一个TaskSet,称为Stage;Stage的划分和调度是由DAGScheduler负责的。Stage分为Result Stage和Shuffle Map Stage。
DAGScheduler
根据Job构建基于Stage的DAG,划分Stage依据是RDD之间的依赖关系。
Task
Application的运行基本单位,Executor上的工作单元。其调度和 管理又TaskScheduler负责。
TaskScheduler
将TaskSet提交给Worker运行,每个Worker运行了什么Task于此处分配。同时还负责监控、汇报任务运行情况等。
SchedulerBackend
SchedulerBacked也是一个trait.它的实现与底层资源调度系统(如Mesos,Yarn)进行交互,配合TaskScheduler实现具体任务执行所需的资源分配。核心接口是receiveOffers。
耐心读完以上概念,如果能够画出简略的Spark基本运作图,那么你对Spark的基本概念就应该没有问题了。
宽依赖
一个子RDD的分区依赖于父RDD的所有分区。
窄依赖
一个父RDD的分区最多只被一个子RDD的分区所引用。
共享变量
在Spark Application运行时,可能需要一些变量,提供给Task或Driver使用。Spark提供了两种共享变量,一种是可以缓存到各个节点的广播变量,另一种是只支持加法操作,实现求和的累加变量。
编者刚开始了解Spark内容,本文参考博客,请多多指教