美文网首页
Spark作业运行机制

Spark作业运行机制

作者: Caucher | 来源:发表于2020-11-03 17:52 被阅读0次

    Spark作业运行在SparkContext中,作业包含若干个Stages,构成一个DAG。Spark作业运行的高层抽象是一个driver实体,和若干Executor实体。Driver托管SparkContext,Executor执行具体的任务。

    基本运行流程

    从流程上来看,一个Spark job按照以下阶段运行:

    1. 构建SparkContext
    2. DAGScheduler负责将job分解成若干Stage,共同构成一个DAG
    3. TaskScheduler负责把每个阶段的任务提交到集群。将每个task找到一个最合适的Executor上运行。运行完了再分配下一个。每个task一个cpu核。
    4. 这些take通过调度程序后端启动,其向executor后端分发任务,命令启动。

    在某个task失败之后,TaskScheduler把这个task发给另外一个Executor重新启动。

    DAG具体是如何构建的呢?Spark将任务分成两种:

    1. shuffle map任务,其实就是转化操作,任务在一个rdd上计算,将结果输出到一个新分区上去,以待后面取用。
    2. result任务,运行在最终Stage,每个分区把其上的rdd进行计算,结果返回给driver。

    另外DAG还会为每个任务设置一个位置偏好,例如hdfs node local,或者缓存的rdd,process local

    Executor和Cluster Manager

    Cluster Manager负责管理每个Executor的生命周期,配有多种选项。

    • local模式。 本机运行,driver和executor在同一个JVM中。local[*],local[n]等等分配内核线程。
    • 独立模式。分布式实现。有1个master和多个worker。spark://host:port
    • Mesos模式。
    • Yarm模式。分布式实现。每个Executor在一个Yarn Container中运行。yarn-client/yarn-cluster。

    Spark on Yarn

    yarn-client

    当driver构建SparkContext实例时,就启动了与Yarn之间的交互。

    1. Spark首先向Yarn RM提交了一个应用;
    2. RM找到一个NM,启动一个Container,在其上运行一个名为SparkExecutorLauncher的AM
    3. 这个AM向RM申请资源,然后向申请到的NM发出启动Container命令,这个Container进程称为ExecutorBackend。
    4. 每个Executor启动时连接回SparkContext,注册自身。因此SparkContext也获得了Executor信息。

    yarn-cluster

    client和cluster没有太大区别,性能上也相差无几。主要差别就是cluser模式的spark driver是后启动的,在AM被分配好后才会启动driver。

    相关文章

      网友评论

          本文标题:Spark作业运行机制

          本文链接:https://www.haomeiwen.com/subject/fgtuvktx.html