打好基础,别小瞧它!

  spark的运行模式多种多样,在单机上既可以本地模式运行,也可以伪分布模式运行。而当以分布式的方式在集群中运行时。底层的资源调度可以使用Mesos或者Yarn,也可使用spark自带的Standalone模式。

  1、Application : Application的概念和Hadoop MapReduce中的类似,都是用户编写的Spark应用程序,其中包含了一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码。

  

  2、Driver : 使用Driver这一概念的分布式框架很多,比如Hive等。 Spark中的Driver即运行Application的main()函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境。在Spark中由SparkContext负责与ClusterManager通信,进行资源的申请、任务的分配和监控等。当Executor部分运行完毕后,Driver同时负责将SparkContext关闭。通常用SparkContext代表Driver。

  3、Executor : 某个Application运行在Worker节点上的一个进程,该进程负责运行某些Task,并且负责将数据存在内存或者磁盘上,每个Application都有各自独立的一批Executor。 在Spark on Yarn模式下其进程名称为CoarseGrainedExecutor Backend,类似于Hadoop MapReduce中的YarnChild。一个CoarseGrainedExecutor  Backend进程有且仅有一个executor对象,它负责将Task包装成taskRunner,并从线程池抽取出一个空闲线程运行Task。这样,每个CoarseGrainedExecutor  Backend能并行运行Task的数量就取决于分配给它的CPU的个数了。

  

  4、Cluster Manager : 指的是在集群上获取资源的外部服务,目前有三种类型:

    Standalone : Spark原生的资源管理,由Master负责资源的分配,可以在亚马逊的EC2上运行。

    Apache Mesos : 与Hadoop MapReduce兼容性良好的一种资源调度框架。

      Hadoop Yarn  : 主要是指的Yarn中的ResourceManager。

  5、Worker  : 集群中任何可以运行Application代码的节点,类似于Yarn中的NodeManager节点。在Standalone模式中指的就是通过slave文件配置的Worker节点,在Spark on Yarn模式中指的就是NodeManager节点。

  6、Task  :  被送到某个Executor上的工作单元,和Hadoop MapReduce中的MapTask和ReduceTask概念一样,是运行Application的基本单元多个Task组成一个Stage,而Task的调度和管理等由下面的TaskScheduler负责。

  7、Job  : 包含多个Task组成的并行计算,往往由Spark Action触发产生。一个Application中可能会产生多个Job

  8、Stage : 每个Job会拆分很多组Task,作为一个TaskSet,其名称为Stage。Stage的划分或调度由下面的DAGScheduler负责。Stage有非最终的Stage(即 Shuffle Map Stage)和最终的Stage(即Result Stage)两种。Stage的边界就是发生Shuffle的地方。

  9、RDD :Spark的基本计算单元,可以通过一系列算子进行操作(主要有Transformation 和Action操作)。同时,RDD是Spark最核心的东西,它表示已被分区、被序列化的、不可变的、有容错机制的,并且能够被并行操作的数据集合。其存储级别可以是内存,也可以是磁盘,可通过spark.storage.StorageLevel属性配置。

  10、共享变量 :在Spark Application运行时,可能需要一些变量,提供给Task 或Driver等使用。 Spark提供了两种共享变量,一种是可以缓存到各个节点的广播变量,另一种是只支持加法操作,可以实现求和的累加变量。

  11、宽依赖 : 与Hadoop MapReduce中Shuffle的数据依赖相同,宽依赖需要计算好所有父RDD对应分区的数据,然后在节点之间进行Shuffle。

  12、窄依赖: 指某个具体的RDD,其分区partitoin a最多被子RDDD中的一个分区partitoin b依赖。此种情况只有Map任务,是不需要发生Shuffle过程的。

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

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

05-26 23:57