zoukankan      html  css  js  c++  java
  • Spark中的术语图解总结

    参考:http://www.raincent.com/content-85-11052-1.html

    1、Application:Spark应用程序

    指的是用户编写的Spark应用程序,包含了Driver功能代码和分布在集群中多个节点上运行的Executor代码。

    Spark应用程序,由一个或多个作业JOB组成,如下图所示:

    1.jpg

    2、Driver:驱动程序

    Driver负责运行Application的Main()函数并且创建SparkContext,其中创建SparkContext的目的是为了准备Spark应用程序的运行环境。在Spark中由SparkContext负责和ClusterManager通信,进行资源的申请、任务的分配和监控等;当Executor部分运行完毕后,Driver负责将SparkContext关闭。通常SparkContext代表Driver,如下图所示:

    2.jpg

    3、Cluster Manager:资源管理器

    指的是在集群上获取资源的外部服务,常用的有:

    • Standalone,Spark原生的资源管理器,由Master负责资源的分配;
    • Haddop Yarn模式由Yarn中的ResearchManager负责资源的分配;
    • Messos,由Messos中的Messos Master负责资源管理。
    3.jpg

    4、Executor:执行器

    Application运行在Worker节点上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上,每个Application都有各自独立的一批Executor,如下图所示:

    4.jpg

    5、Worker:计算节点

    集群中任何可以运行Application代码的节点,类似于Yarn中的NodeManager节点。

    • 在Standalone模式中指的就是通过Slave文件配置的Worker节点
    • 在Spark on Yarn模式中指的就是NodeManager节点
    • 在Spark on Messos模式中指的就是Messos Slave节点
    5.jpg

    6、RDD:弹性分布式数据集

    Resillient Distributed Dataset,Spark的基本计算单元,可以通过一系列算子进行操作(主要有Transformation和Action操作),如下图所示:

    6.jpg

    7、Lineage(血统)

    记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。

    8、依赖

    RDDs通过操作算子进行转换,转换得到的新RDD包含了从其他RDDs衍生所必需的信息,RDDs之间维护着这种血缘关系,也称之为依赖。

    1)窄依赖(比喻:独生子女)

    RDDs之间分区是一一对应的,父RDD每一个分区最多被一个子RDD的分区所用;表现为一个父RDD的分区对应于一个子RDD的分区,或两个父RDD的分区对应于一个子RDD 的分区。如图所示:

    7.jpg

    常见的窄依赖有:map、filter、union、mapPartitions、mapValues、join(父RDD是hash-partitioned :如果JoinAPI之前被调用的RDD API是宽依赖(存在shuffle), 而且两个join的RDD的分区数量一致,join结果的rdd分区数量也一样,这个时候join api是窄依赖)。

    2)宽依赖(比喻:超生)

    下游RDD的每个分区与上游RDD(也称之为父RDD)的每个分区都有关,是多对多的关系。父RDD的每个分区都可能被多个子RDD分区所使用,子RDD分区通常对应所有的父RDD分区。如图所示:

    8.jpg

    常见的宽依赖有groupByKey、partitionBy、reduceByKey、join(父RDD不是hash-partitioned :除此之外的,rdd 的join api是宽依赖)。

    9、DAG:有向无环图

    Directed Acycle graph,反应RDD之间的依赖关系,如图所示:

    9.jpg

    10、DAGScheduler:有向无环图调度器

    基于DAG划分Stage并以TaskSet的形势提交Stage给TaskScheduler;

    负责将作业拆分成不同阶段的具有依赖关系的多批任务;

    最重要的任务之一就是:计算作业和任务的依赖关系,制定调度逻辑

    在SparkContext初始化的过程中被实例化,一个SparkContext对应创建一个DAGScheduler。

    10.jpg

    11、TaskScheduler:任务调度器

    将Taskset提交给worker(集群)运行并回报结果;负责每个具体任务的实际物理调度。如图所示:

    11.jpg

    12、Job:作业

    由一个或多个调度阶段所组成的一次计算作业;包含多个Task组成的并行计算,往往由Spark Action催生,一个JOB包含多个RDD及作用于相应RDD上的各种Operation。如图所示:

    12.jpg

    13、Stage:调度阶段

    一个任务集对应的调度阶段;每个Job会被拆分很多组Task,每组任务被称为Stage,也可称TaskSet,一个作业分为多个阶段;Stage分成两种类型ShuffleMapStage、ResultStage。如图所示:

    13.jpg

    14、TaskSet:任务集

    由一组关联的,但相互之间没有Shuffle依赖关系的任务所组成的任务集。如图所示:

    14.jpg

    提示:

    1)一个Stage创建一个TaskSet;
    2)为Stage的每个Rdd分区创建一个Task,多个Task封装成TaskSet

    15、Task:任务

    被送到某个Executor上的工作任务;单个分区数据集上的最小处理流程单元。如图所示:

    15.jpg

    总体如图所示:

    16.jpg

    常见的窄依赖有:map、filter、union、mapPartitions、mapValues、join(父RDD是hash-partitioned :如果JoinAPI之前被调用的RDD API是宽依赖(存在shuffle), 而且两个join的RDD的分区数量一致,join结果的rdd分区数量也一样,这个时候join api是窄依赖)。

  • 相关阅读:
    03JavaScript程序设计修炼之道 2019-06-23_15-50-11 验证码
    03JavaScript程序设计修炼之道 2019-06-23_15-21-11 全选和反选
    python进阶(10)迭代器
    python进阶(9)多线程
    python进阶(8)多进程
    python进阶(7)垃圾回收机制
    python进阶(6)深拷贝和浅拷贝
    python进阶(5)异常模块
    python进阶(4)文件操作
    python进阶(3)json文件与python字典的转化
  • 原文地址:https://www.cnblogs.com/MWCloud/p/11405631.html
Copyright © 2011-2022 走看看