zoukankan      html  css  js  c++  java
  • Spark执行的组成部分:作业、任务和步骤

    《Spark快速大数据分析》 

    8.2 Spark执行的组成部分:作业、任务和步骤

     
    程序定义了一个RDD对象的有向无环图DAG
     
    每个RDD维护了其指向一个或多个父节点的引用,
    以及表示其与父节点之间关系的信息。
    RDD可以追踪到其所有的祖先节点。
     
    Spark提供了toDebugString方法来查看RDD的谱系。
     
     
    在调用行动操作之前,RDD都只是存储着可以让我们计算出
    具体数据的描述信息。要触发实际计算,需要对RDD调用
    一个行动操作,比如使用collect将数据收集到驱动器程序中。
     
    Spark调度器会创建出用于计算行动操作的RDD物理执行计划。
    我们再调用collect方法,于是RDD的每个分区都会被物化出来
    并发送到驱动器程序中。
     
    Spark调度器从最终调用行动操作的RDD出发,
    向上回溯所有必须计算的RDD。
     
    调度器会访问RDD的父节点,父节点的父节点,
    以此类推,递归向上生成计算所有必要的祖先RDD的物理计划。
     
    调度器为有向图中的每个RDD输出计算步骤,
    步骤中包括RDD上需要应用于每个分区的任务。
    然后以相反的顺序执行这些步骤,计算出最终所求的RDD。
     
    当调度器进行流水线执行pipelining,或把多个RDD合并到一个步骤中。
    当RDD不需要混洗数据就可以从父节点计算出来时,调度器就会自动进行
    流水线执行。
    toDebugString中输出的谱系使用不同的缩进等级来展示
    RDD是否会在物理步骤中进行流水线执行。
    在物理执行时,执行计划输出的缩进等级与其父节点相同的RDD
    会与其父节点在同一个步骤中进行流水线执行。
    比如 textFile -> map -> filter。
     
    除了流水线执行的优化,当一个RDD已经缓存在集群内存或磁盘上时,
    Spark的内部调度器也会自动截断RDD谱系图。
    在这种情况下,Spark会“短路”求值,直接基于缓存下来的RDD进行计算。
    还有一种截短RDD谱系图的情况发生在当RDD已经在之前的数据混洗中
    作为副产品物化出来时,哪怕该RDD并没有被显式调用persist方法。
    这种内部优化是基于Spark数据混洗操作的输出均被写入磁盘的特性。
    同时也充分利用了RDD图的某些部分会被计算多次的事实。
     
    多次调用collect只会产生一个步骤来完成这个行动操作。
     
    特定的行动操作所生成的步骤的集合被称为一个作业。
    我们通过类似count之类的方法触发行动操作,创建出一个或多个步骤组成作业。
     
    一旦步骤图确定下来,任务就会被创建出来并发给内部的调度器。
    该调度器在不同的部署模式下会有所不同。物理计划中的步骤会依赖于其他步骤,
    有先后次序,这些步骤会以特定的顺序执行。
     
    一个物理步骤会启动很多任务,每个任务都是在不同的数据分区上做同样的事情。
    任务内部的流程是一样的。
    1.从数据存储(如果该RDD是一个输入RDD)或已有RDD(如果该步骤是基于已经缓存的数据)
    或数据混洗的输出中获取输入数据;
    2.执行必要的操作来计算出这些操作所代表的RDD。例如,对输入数据执行map, filter函数,
    或者进行分组或归约操作;
    3.把输出写到一个数据混洗文件中,写入外部存储,或者发回驱动器程序。
     
    Spark的大部分日志信息和工具都是以步骤,任务或数据混洗为单位的。
     
    Spark执行时有下面所列的这些流程:
    1 用户代码定义RDD的有向无环图DAG
        RDD上的操作会创建出新的RDD,并引用它们的父节点,这样就创建出了一个图。
    2 行动操作把有向无环图强制转译为执行计划
        当你调用RDD的一个行动操作时,这个RDD就必须被计算出来,这也要求计算出该RDD
        的父节点。Spark调度器提交一个作业来计算所有必要的RDD。这个作业会包含一个
        或多个步骤,每个步骤其实就是一波并行执行的计算任务。一个步骤对应DAG中一个或多个RDD,
        一个步骤对应多个RDD是因为发生了流水线执行。
    3 任务于集群中调度执行
        步骤是按照顺序处理的,任务则独立的启动来计算出RDD一部分。一旦作业的最后一个步骤结束,
        一个行动操作也就执行完了。
     
  • 相关阅读:
    网络叠加路由叠加小型网络解决方案
    分辨率类[置顶] c# winform窗口自适应各种分辨率类
    vista dbgview
    web 设置日期格式(
    ChangeServiceConfig2设置SERVICE_CONFIG_FAILURE_ACTIONS
    设置默认调试器 (vc)
    C#的多线程机制初探(转)
    符号(pdb)
    GetModuleFileNameEx
    ClearDirectory 删除目录
  • 原文地址:https://www.cnblogs.com/ihongyan/p/4973329.html
Copyright © 2011-2022 走看看