`

Spark架构与作业执行流程

 
阅读更多
  • 转载于:http://www.it165.net/pro/html/201404/11952.html
  • http://blog.csdn.net/hwssg/article/details/38537523
  • park应用程序的运行架构:

     

    (1)简单的说:

    由driver向集群申请资源,集群分配资源,启动executor。driver将spark应用程序的代码和文件传送给executor。executor上运行task,运行完之后将结果返回给driver或者写入外界。

    (2)复杂点说:

    提交应用程序,构建sparkContext,构建DAG图,提交给scheduler进行解析,解析成一个个stage,提交给集群,由集群任务管理器进行调度,集群启动spark executor。driver把代码和文件传给executor。executor进行各种运算完成task任务。driver上的block tracker记录executor在各个节点上产生的数据块。task运行完之后,将数据写入HDFS上或者其他类型数据库里。

    (3)全面点说:

    spark应用程序进行各种transformation的计算,最后通过action触发job。提交之后首先通过sparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler进行解析,解析时是以shuffle为边界,反向解析,构建stage,stage之间也有依赖关系。这个过程就是对DAG图进行解析划分stage,并且计算出各个stage之间的依赖关系。然后将一个个TaskSet提交给底层调度器,在spark中是提交给taskScheduler处理,生成TaskSet manager,最后提交给executor进行计算,executor多线程计算,计算完反馈给TaskSetmanager,再反馈给taskScheduler,然后再反馈回DAGScheduler。全部运行完之后写入数据。

    (4)更加深入理解:

    应用程序提交后,触发action,构建sparkContext,构建DAG图,提交给DAGScheduler,构建stage,以stageSet方式提交给TaskScheduler,构建taskSet Manager,然后将task提交给executor运行。executor运行完task后,将完成信息提交给schedulerBackend,由它将任务完成的信息提交给TaskScheduler。TaskScheduler反馈信息给TaskSetManager,删除该task任务,执行下一个任务。同时TaskScheduler将完成的结果插入到成功队列里,加入之后返回加入成功的信息。TaskScheduler将任务处理成功的信息传给TaskSet Manager。全部任务完成后TaskSet Manager将结果反馈给DAGScheduler。如果属于resultTask,交给JobListener。如果不属于resultTask,保存结果。

  • Spark架构与作业执行流程简介

    Local模式

    运行Spark最简单的方法是通过Local模式(即伪分布式模式)。

        运行命令为:./bin/run-example org.apache.spark.examples.SparkPi local

    基于standalone的Spark架构与作业执行流程

    Standalone模式下,集群启动时包括Master与Worker,其中Master负责接收客户端提交的作业,管理Worker。提供了Web展示集群与作业信息。

    名词解释:

    1. Standalone模式下存在的角色。

    Client:客户端进程,负责提交作业到Master。

    Master:Standalone模式中主控节点,负责接收Client提交的作业,管理Worker,并命令Worker启动Driver和Executor。

    Worker:Standalone模式中slave节点上的守护进程,负责管理本节点的资源,定期向Master汇报心跳,接收Master的命令,启动Driver和Executor。

    Driver: 一个Spark作业运行时包括一个Driver进程,也是作业的主进程,负责作业的解析、生成Stage并调度Task到Executor上。包括DAGScheduler,TaskScheduler。

    Executor:即真正执行作业的地方,一个集群一般包含多个Executor,每个Executor接收Driver的命令Launch Task,一个Executor可以执行一到多个Task。

    2.作业相关的名词解释

    Stage:一个Spark作业一般包含一到多个Stage。

    Task:一个Stage包含一到多个Task,通过多个Task实现并行运行的功能。

    DAGScheduler: 实现将Spark作业分解成一到多个Stage,每个Stage根据RDD的Partition个数决定Task的个数,然后生成相应的Task set放到TaskScheduler中。

    TaskScheduler:实现Task分配到Executor上执行。

     

    提交作业有两种方式,分别是Driver(作业的master,负责作业的解析、生成stage并调度task到,包含DAGScheduler)运行在Worker上,Driver运行在客户端。接下来分别介绍两种方式的作业运行原理。

    Driver运行在Worker上

        通过org.apache.spark.deploy.Client类执行作业,作业运行命令如下:

            ./bin/spark-class org.apache.spark.deploy.Client launch spark://host:port file:///jar_url org.apache.spark.examples.SparkPi spark://host:port

        作业执行流如图1所示。

    图1

    作业执行流程描述:

        客户端提交作业给Master Master让一个Worker启动Driver,即SchedulerBackend。Worker创建一个DriverRunner线程,DriverRunner启动SchedulerBackend进程。 另外Master还会让其余Worker启动Exeuctor,即ExecutorBackend。Worker创建一个ExecutorRunner线程,ExecutorRunner会启动ExecutorBackend进程。 ExecutorBackend启动后会向Driver的SchedulerBackend注册。SchedulerBackend进程中包含DAGScheduler,它会根据用户程序,生成执行计划,并调度执行。对于每个stage的task,都会被存放到TaskScheduler中,ExecutorBackend向SchedulerBackend汇报的时候把TaskScheduler中的task调度到ExecutorBackend执行。 所有stage都完成后作业结束。

    Driver运行在客户端

        直接执行Spark作业,作业运行命令如下(示例):

            ./bin/run-example org.apache.spark.examples.SparkPi spark://host:port

        作业执行流如图2所示。

    图2

    作业执行流程描述:

          客户端启动后直接运行用户程序,启动Driver相关的工作:DAGScheduler和BlockManagerMaster等。 客户端的Driver向Master注册。 Master还会让Worker启动Exeuctor。Worker创建一个ExecutorRunner线程,ExecutorRunner会启动ExecutorBackend进程。 ExecutorBackend启动后会向Driver的SchedulerBackend注册。Driver的DAGScheduler解析作业并生成相应的Stage,每个Stage包含的Task通过TaskScheduler分配给Executor执行。 所有stage都完成后作业结束。

    基于Yarn的Spark架构与作业执行流程

    这里Spark AppMaster相当于Standalone模式下的SchedulerBackend,Executor相当于standalone的ExecutorBackend,spark AppMaster中包括DAGScheduler和YarnClusterScheduler。

        Spark on Yarn的执行流程可以参考http://www.csdn.net/article/2013-12-04/2817706--YARN spark on Yarn部分。
        

         这里主要介绍一下Spark ApplicationMaster的主要工作。代码参考Apache Spark 0.9.0版本ApplicationMaster.scala中的run()方法。

             步骤如下:

        设置环境变量spark.local.dir和spark.ui.port。NodeManager启动ApplicationMaster的时候会传递LOCAL_DIRS(YARN_LOCAL_DIRS)变量,这个变量会被设置为spark.local.dir的值。后续临时文件会存放在此目录下。 获取NodeManager传递给ApplicationMaster的appAttemptId。 创建AMRMClient,即ApplicationMaster与ResourceManager的通信连接。 启动用户程序,startUserClass(),使用一个线程通过发射调用用户程序的main方法。这时候,用户程序中会初始化SparkContext,它包含DAGScheduler和TaskScheduler。 向ResourceManager注册。 向ResourceManager申请containers,它根据输入数据和请求的资源,调度Executor到相应的NodeManager上,这里的调度算法会考虑输入数据的locality。
分享到:
评论

相关推荐

    【Spark内核篇01】Spark通信架构和集群启动流程1

    在作业执行过程中,Driver会将用户程序拆分为多个Job,每个Job由一系列Stage组成,Stage再进一步划分为Task。这些Task会在Executor之间进行调度执行。 Executor是Spark工作负载的执行实体,它们在Spark应用启动时被...

    Spark总体架构和运行流程

    Spark 运行架构如图 1 所示,包括集群资源管理器(Cluster Manager)、多个运行作业任务的工作结点(Worker Node)、每个应用的任务控制结点(Driver)和每个工作结点上负责具体任务的执行进程(Executor)。...

    4 Spark架构及内部实现剖析.pdf

    Spark通过RDD创建DAG(有向无环图),代表作业的执行流程。Spark为DAG生成逻辑查询计划,并将其转换为物理查询计划以进行实际的计算。DAG被分解成一系列的stage,每个stage包含若干task。在执行过程中,Spark的任务...

    Spark技术内幕深入解析Spark内核架构设计与实现原理

    5. **DAG(Directed Acyclic Graph)**:Spark通过DAG来表示任务的执行流程,每个RDD转换形成一个DAG的节点,行动操作触发DAG的执行。 6. **Stage和Task**:Spark将DAG拆分为多个Stage,每个Stage是一组可以并行...

    spark笔记整理文档

    6. Spark作业执行流程: 提交Spark作业后,Driver会将作业分解为Stage(基于shuffle划分),然后提交Task到Executor执行。Executor在内存中缓存数据,并在本地执行任务,提高整体性能。 7. Spark内存管理: Spark...

    spark替代Hive实现ETL作业

    - 利用Spark UI手动监控作业执行情况。 - 增加自动监控机制,监控作业执行时间和资源使用情况。 - 定期检查节点状态,关注失败作业的数量、平均执行时间和GC耗时,及时采取措施。 - 使用`spark.blacklist`特性...

    Spark技术内幕 深入解析Spark内核架构设计与实现原理 ,张安站著

    《Spark技术内幕:深入解析Spark内核架构设计与实现原理》是张安站撰写的一本专著,专注于探讨Apache Spark这一大数据处理框架的核心机制。本书深入浅出地讲解了Spark的内部工作原理,旨在帮助读者理解和掌握Spark在...

    Spark架构原理

    ### Spark架构原理详解 #### 一、Spark简介 Apache Spark是一种快速、通用的大规模数据处理系统,它构建在Hadoop之上,提供了比MapReduce更快的数据处理能力。Spark的核心设计目标是提供高性能的数据处理能力,...

    spark案例与实验教程-高清-2017年4月

    2. Spark架构:介绍了Spark的架构设计,包括驱动程序、工作节点、集群管理器和执行作业的原理。 3. Spark安装与配置:指导如何安装Spark环境,包括配置依赖关系,以及如何搭建本地和集群模式下的运行环境。 4. ...

    spark Software Components架构图及Task Scheduler架构

    Stage是Spark作业的最小调度单元,由一系列相互依赖的Task组成,同一Stage内的Task可以并行执行。Task划分基于RDD(Resilient Distributed Datasets)的宽依赖和窄依赖,宽依赖(如join操作)会导致数据shuffle,...

    apache spark的设计与实现

    本篇文章将详细介绍Spark的设计理念、核心组件、执行流程及其关键特性。 #### 二、系统部署与架构 ##### 2.1 部署架构概述 Apache Spark的核心部署架构包括Master节点和Worker节点。Master节点负责集群资源的分配...

    Learning.Spark.pdf(英文版)+图解Spark核心技术与案例实战.pdf

    书中详细解析了Spark作业的执行流程,包括Stage划分、Task调度以及 Shuffle过程,这些是理解Spark性能优化的关键。此外,书中还涉及了Spark与Hadoop、Hive等其他大数据组件的集成,以及如何在实际项目中运用Spark...

    大数据组件 Spark 面试题 + Spark 高频面试题

    - Spark架构包括Driver、Executor和Scheduler等组件,作业提交流程涉及Driver向资源管理器(如YARN的ResourceManager)申请资源,启动Executor,然后Executor执行任务。 - 在YARN的client模式下,Driver运行在...

    Spark调度架构原理详解

    Spark调度架构原理详解 Spark调度架构原理详解是Spark核心组件之一,对Spark的执行和调度至关重要。本文将从Spark调度架构原理的角度,深入探讨...Spark RDD操作和Spark执行流程都是Spark调度架构原理的重要组成部分。

    Spark简介以及其生态圈

    Spark运行架构由几个核心组件构成,其中包括术语定义、运行基本流程、DAGScheduler、TaskScheduler以及RDD运行原理。在术语定义中,Application指的是用户编写的Spark应用程序,它由运行main()函数的Driver和分布在...

    透过源码看懂Flink核心框架的执行流程.pdf

    本文将通过Flink官网提供的WordCount示例来深入分析其核心架构和执行流程,旨在帮助读者更好地理解Flink的运行机制。在正式介绍之前,我们需要明确一些概念,例如流处理、批处理、有状态计算等,可以参照Flink的官方...

    追源索骥:透过源码看懂Flink核心框架的执行流程.pdf

    4. 程序执行流程: - 本地模式下的execute方法:在本地模式下,execute方法是程序启动和执行的入口点。 - 远程模式(RemoteEnvironment)的execute方法:在集群环境中,程序通过远程模式的execute方法启动。 - 程序...

    Spark源码剖析

    包括RDD(弹性分布式数据集)的设计思想、Spark的运行时架构、任务调度和执行等。 2. Spark运行时核心:深入解析Spark的执行模型,如何在集群上分配计算资源、任务的调度策略、内存管理和容错机制等。这个部分还会...

    spark-1.6.3.zip

    2. **跟踪执行流程**:创建一个简单的Spark程序,通过IDE的断点和调试功能,逐步理解任务的提交、调度和执行过程。 3. **研究特定功能**:选择一个你感兴趣的Spark特性,如DataFrame的SQL查询或Spark Streaming的...

    Spark源码分析.pdf

    1. Spark架构:解释Spark的基本组件和它们之间的交互,以及如何构建Spark应用程序。 2. RDD原理:深入剖析RDD的生命周期,包括创建、转换和行动操作,以及容错机制。 3. 调度系统:分析DAGScheduler和TaskScheduler...

Global site tag (gtag.js) - Google Analytics