Spark运行流程及架构设计

  • spark中一个应用程序application会在任务控制节点上启动一个Driver程序,并且这个Driver程序会创建一个SparkContext对象(类似于mapreduce中的applicationManager)。该对象有三个任务,1是向资源管理器clusterManager注册(类似mapreduce中的resourcemanager),2是向资源管理器clusterManager申请运行资源,3是根据应用程序RDD间的依赖关系构建多个DAG对象(多个作业job,作业是Spark中实际执行的计算任务,而DAG则是表示这些计算任务执行计划的数据结构),通过DAG调度器得到多个阶段(任务集),再通过任务调度器得到多个任务。刚才SparkContex向资源管理器申请了资源,该资源不会直接分给SC,而是会直接分配资源给工作节点上的executor进程并启动该进程,executor进程同样两项任务,1是通过心跳告知资源管理器自己的运行状况(就像mapreduce中nodemanager会向resourcemanager报告自己的运行状况。),2是向sparkcontex申请任务并将执行结果返回给SC。
  • application构成:1个任务控制节点+n个工作job(DAG)
  • 运行架构:任务控制节点Driver、工作节点、进程executor、集群管理器clusterManager
  • 对以上内容总结如下:
  1. Driver程序和SparkContext
    • Spark应用程序确实会在任务控制节点(通常是集群中的某个节点)上启动一个Driver程序。
    • Driver程序会创建一个SparkContext对象,这是Spark应用程序的入口点。
  2. 注册与资源申请
    • SparkContext首先会向资源管理器(如YARN的ResourceManager或Spark Standalone的Master)注册,这样资源管理器就知道这个应用程序已经启动并且需要资源。
    • 接着,SparkContext会向资源管理器申请资源来启动Executor进程。这些资源通常包括CPU核数和内存大小。
  3. DAG(Directed Acyclic Graph)构建与调度
    • 根据应用程序中的RDD操作,Spark会构建一个或多个DAG(有向无环图),这些DAG表示了RDD之间的依赖关系。
    • DAG调度器(DAGScheduler)会将DAG切分成多个阶段(Stages),每个阶段包含一组可以并行执行的任务(Tasks)。
    • 任务调度器(TaskScheduler)会负责将任务分配给Executor进程来执行。
  4. Executor进程
    • Executor进程是在工作节点(Worker Nodes)上启动的,它们负责执行具体的计算任务。
    • Executor进程通过心跳(Heartbeat)机制与Driver程序通信,告知自己的状态,如资源使用情况、任务执行进度等。
    • Executor进程会向Driver程序请求任务,并在完成后将结果返回给Driver程序。

**一个应用程序通过单个SparkContext与集群交互,它向clustermanager申请资源后,资源管理器会启动n个工作结点上的多个executor进程,这些进程向sparkcontext申请任务来执行,这些任务来自不同的job的不同阶段,所以说job之间是并行计算的。

相关推荐

  1. Spark运行流程架构设计

    2024-05-02 10:02:02       26 阅读
  2. Spark大数据 Spark运行架构与原理

    2024-05-02 10:02:02       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-02 10:02:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-02 10:02:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-02 10:02:02       82 阅读
  4. Python语言-面向对象

    2024-05-02 10:02:02       91 阅读

热门阅读

  1. 数据量比较大 | 分库分表?

    2024-05-02 10:02:02       28 阅读
  2. rust 使用记录

    2024-05-02 10:02:02       29 阅读
  3. 美国CADS (原爱因斯坦NCPS计划) 2024年进展

    2024-05-02 10:02:02       25 阅读
  4. C++进阶——STL

    2024-05-02 10:02:02       27 阅读
  5. OceanBase在实际应用中有哪些优势和不足?

    2024-05-02 10:02:02       88 阅读
  6. 社交到底是什么?

    2024-05-02 10:02:02       32 阅读
  7. redis sorted Set命令基本使用

    2024-05-02 10:02:02       29 阅读
  8. 11、Flink 的 Keyed State 详解

    2024-05-02 10:02:02       26 阅读
  9. Kubernetes学习笔记01

    2024-05-02 10:02:02       24 阅读
  10. 关于HTML

    2024-05-02 10:02:02       38 阅读
  11. netty的继续学习一(相关概念)

    2024-05-02 10:02:02       31 阅读
  12. c#工控行业的视觉技术栈

    2024-05-02 10:02:02       26 阅读
  13. 串行化执行代码实践

    2024-05-02 10:02:02       33 阅读