Spark运行原理

Spark运行原理


  • Application:Spark应用程序

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

    • Spark应用程序,由一个或多个作业JOB组成
      在这里插入图片描述

  • Driver:驱动程序

    • Spark中的Driver即运行application的main()函数并创建SparkContext,其中创建SparkContext的目的是为了准备Spark应用程序的运行环境.在Spark中由SparkContext负责和ClusterManager通信,进行资源的申请,任务的分配和监控等;当Executor部分运行完毕后,Driver负责将SparkContext关闭.

    在这里插入图片描述

  • Cluster Manager:资源管理器

    • 指的是在集群上获取资源的外部服务,常用的有:Standalone,Spark原生的资源管理器,由Master负责资源的分配;Hadoop Yarn,由Yarn中的ResearchManager负责资源的分配;Messos,由Messos中的Messos Master负责资源管理
  • Executor:执行器

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

    在这里插入图片描述

  • Worker:计算节点

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

    在这里插入图片描述

  • RDD:弹性分布式数据集

    • Resillient Distributed Dataset,Spark的基本计算单元,可以通过一系列算子进行操作

    在这里插入图片描述

  • 窄依赖

    • 父RDD每一个分区最多被一个子RDD的分区所用;表现为一个父RDD的分区对应一个子RDD的分区,或两个父RDD的分区对应一个子RDD的分区
      在这里插入图片描述
  • 宽依赖

    • 父RDD的每个分区都可能被多个子RDD分区所使用,子RDD分区通常对应所有的父RDD分区
      在这里插入图片描述
  • DAG:有向无环图

    • Directed Acycle graph,反应RDD之间的依赖关系

  • DAGScheduler:有向无环图调度器

    • 基于DAG划分Stage并以TaskSet的形式提交stage给TaskScheduler;负责将作业拆分成不同阶段的具有依赖关系的多批任务;最重要的任务之一就是:计算作业和任务的依赖关系,指定调度逻辑.在SparkContext初始化的过程中被实例化,一个SparkContext对应创建一个DAGScheduler

    在这里插入图片描述

  • TaskScheduler

    • 将Taskset提交给worker运行并汇报结果;负责每个具体任务的实际物理调度.

    在这里插入图片描述

  • Job:作业

    • 由一个或者多个调度阶段所组成的一次计算作业;包含多个Task成的并行计算,往往由Spark Action催生,一个job包含多个RDD及作用于RDD上的各种Operation

    在这里插入图片描述

  • Stage:调度阶段

    • 一个任务集对应的调度阶段;每个job会被拆分为很多组Task,每组Task被称为Stage,也可称TaskSet,一个作业Fenwick多个阶段;Stage分成两种类型ShuffleMapStage,ResultStage

    在这里插入图片描述

  • TaskSet:任务集

    • 由一组关联的,但是相互之间没有shuffle依赖关系的任务所组成的任务集

      • 一个stage创建一个TaskSet
      • 为Stage的每个RDD分区创建一个Task,多个Task封装成TaskSet

    在这里插入图片描述

  • Task:任务

    • 被送到某个Executor上的工作任务;单个分区数据集上的最小处理流程单元

    在这里插入图片描述

  • 总体如下图所示

在这里插入图片描述


  • Spark运行基本流程

在这里插入图片描述

  1. 构建Spark Application运行环境
  2. SparkContext向资源管理器注册
  3. SparkContext向资源管理器申请运行Executor
  4. 资源管理器分配Executor
  5. 资源管理器启动Executor
  6. Executor发送心跳至资源管理器
  7. SparkContext构成DAG图
  8. 将DAG图分解成Stage
  9. 将Stage发送给TaskScheduler
  10. Executor向SparkContext申请Task
  11. TaskScheduler向Task发给Executor运行
  12. Executor运行
  13. 同时SparkContext将应用程序代码发送给Executor
  14. Task在Executor上运行,运行完毕释放所有资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值