Spark集群术语

Spark集群术语解析

1. Application

        Application是用户在Spark上构建(编写)的程序,包含driver program 和executors(分布在集群中多个节点上运行的Executor代码)。apache

2. SparkContext

        Spark的上下文对象,是程序的起点,通往集群的入口(与cluster进行链接),经过其能够建立RDD(获取数据),在其中配置的参数拥有最高优先级。在Spark中由SparkContext负责和ClusterManager通行,进行资源的申请,任务的分配和监控等。缓存


3. Driver program

        包含应用程序的main函数,而且运行时会建立SparkContext。当Executor部分运行完后,Driver负责将SparkContext关闭。多线程

4. Cluster Manager

        集群资源管理的外部服务,在Spark上现有Standalone(Spark自带的管理器),YARN(hadoop 2.x的管理器),Mesos等三种集群资源管理器,Standalone能知足绝大部分对集群资源管理的需求,基本上只有在集群中运行多套计算框架(例如同时运行MapReduce和Spark)的时候才建议使用YARN和Mesos。并发

5. Deploy mode

        代表driver程序运行的位置。在”cluster”模式时,框架会在集群中启动driver。在”client”模式时,driver在集群外被提交者启动。框架

6. Worker Node

        集群中运行应用Application代码的节点,在Standalone模式中指的是经过slaves文件配置的Worker节点,在Spark on Yarn模式中指的就是NodeManager节点。函数


7. Executor

        一个Application运行在Worker节点上的一个进程,负责运行某些Task,而且负责将数据存放在内存或磁盘上。每一个Application都有各自独立的一批Executor,一个Executor只能为一个Application服务,一个Worker上可能会有多个Executor,在Executor内部经过多线程的方式并发处理应用的任务(Task)。在Spark on Yarn模式下,其进程名称为CoarseGrainedExecutorBackend。一个CoarseGrainedExecutorBackend进程有且仅有一个Executor对象,负责将Task包装成taskRunner,并从线程池中抽取一个空闲线程运行Task。每一个CoarseGrainedExecutorBackend能并行运行Task的数量取决于分配给它的CPU个数。oop




8. Task

        被Driver发送到executor的工做单元(最终在worker节点运行的任务),和MapReduce中的MapTask和ReduceTask概念同样,是运行Application的基本单位。多个Task组成一个Stage,而Task的调度及管理等由TaskScheduler负责,一般状况下一个task会处理一个split的数据,每一个split通常就是一个Block块的大小。spa


9. Job

        一道做业,即应用完成某项需求所须要的一系列工做(由一系列task组成的并行计算)。与Spark的action相对应,每一个action操做(例如count,saveAsTextFile,collect等)都会对应一个job实例,可在driver的日志中看到相关信息。一个Application可能产生多个Job。线程

10. Stage

        一个Job会分红不少组Task,每一组任务被分为Stage,相似于MapReduce的map和reduce,划分Stage的依据:一个Stage开始通常是因为读取外部数据或者Shuffle数据,一个Stage的结束通常是因为发生了Shuffle(例如reduceByKey)或者整个Job结束时把数据放到hdfs等存储系统上(例如saveAsTextFile)。日志


11. DAG

        有向无环图,将job分解成若干个Stage,每一个Stage都由若干个Task组成,这些Stage都是有前后顺序的,故将这些Stage组织成DAG,表示其前后顺序。

12. Taskset

        每一个Stage由若干个Task组成,这些task统一称为taskset。


12. RDD

        Spark的基本计算单元,能够进行一系列算子进行操做(主要为Transformation和Action操做)。同时,RDD是Spark最核心的东西,它表示已被分区,被序列化,不可变的,有容错基质的,而且能被并行操做的数据集合。能够存在内存,也能够存在磁盘,能够经过persist()方法中的org.apache.spark.storage.StorageLevel属性进行配置。

13. 共享变量

       在Application运行时,可能须要共享一些变量,供Task或Driver等使用。Spark提供了两种共享变量,一种是能够缓存到各个节点的广播变量(broadcast),一种是只支持加法操做,能够实现求和的累加变量(accumulators)。

14. 宽依赖

       或称为ShuffleDependency,跟MapReduce中的Shuffle的数据依赖相同,宽依赖须要计算好全部父RDD对应分区的数据,而后在节点之间进行Shuffle。


15. 窄依赖

       或称为NarrowDependency,指的是摸个具体的RDD,其分区partition A最多被子RDD中的一个分区partition B依赖。此种状况只有Map任务,是不须要发生Shuffle过程的。窄依赖又分为1:1和N:1两种。


16. DAGScheduler

       根据job构建基于Stage的DAG,并提交Stage给TaskScheduler。其划分Stage的依据是根据RDD之间的依赖关系。


17. TaskScheduler

       将Task提交给Worker(集群)运行,每一个Executor运行什么Task就是在此处分配的。

相关文章
相关标签/搜索