博客
关于我
【Spark】(六)Spark 运行流程
阅读量:358 次
发布时间:2019-03-05

本文共 2161 字,大约阅读时间需要 7 分钟。

Spark 是一个强大的计算框架,能够在多种集群环境中高效运行。为了更好地理解其运行机制,我们将从基本概念、运行流程、架构特点以及不同集群模式的实现细节等方面进行系统阐述。

一、Spark 的基本概念

Spark 中的核心组件包括:

  • Application:表示用户提交的应用程序,是运行 Spark任务的主要入口。
  • Driver:负责创建 SparkContext,管理资源申请与任务分配,维护与集群管理器的通信。
  • Executor:在 Worker 节点上运行,负责执行任务。对于 Spark on Yarn 模式,Executor 进程被称为 CoarseGrainedExecutor Backend。
  • Task:是任务的基本单位,多个 Task 组成一个 Stage。
  • Job:由 Action 事件触发,包含多个 Task 的并行计算。
  • Stage:Job 中划分的一个 TaskSet,用于描述任务的执行逻辑。
  • DAGScheduler:基于 Stage 的依赖关系构建数据流图(DAG),并将 Stage提交给 TaskScheduler。
  • TaskScheduler:负责将 TaskSet 分配给 Executor 进行执行,维护任务与 Executor 的映射关系。
  • SchedulerBackend:与具体的资源管理系统(如 Mesos、YARN)对接,负责资源的申请与任务的执行。
  • 二、Spark 的运行流程

    2.1 Spark 的基本运行流程

  • 环境搭建:通过 SparkContext 初始化运行环境,与资源管理器(如 Mesos、Standalone 或 YARN)注册并申请资源。
  • 资源管理:资源管理器根据 SparkContext 的需求分配 Executor 资源,并启动相关进程。
  • 任务提交:SparkContext 构建任务依赖图(DAG),将 Stage 提交给 TaskScheduler。
  • 任务执行:TaskScheduler 根据资源情况分配 Task 给 Executor 进行执行,同时 SparkContext 为 Executor 提供应用程序代码。
  • 资源释放:任务完成后,释放所有占用的资源。
  • 2.2 DAGScheduler 和 TaskScheduler

    • DAGScheduler:负责将 Job 划分为多个 Stage,并根据宽依赖关系构建 DAG。其主要职能包括:
    • 接收 Job 提交请求并生成 Stage。
    • 处理 TaskCompletionEvent,跟踪 Task 的执行状态。
    • 处理任务失败、重试和资源丢失等异常情况。
    • TaskScheduler:维护任务与 Executor 的映射关系,根据调度策略分配资源。其主要职能包括:
    • 接收 TaskSet 并提交给 Executor 执行。
    • 处理任务取消和资源分配。
    • 提供任务状态更新,处理任务结果。

    三、Spark 的运行架构

    3.1 Executor 模型

    Executor 是 Spark 的核心执行单元,主要职能是运行 Task。其内部维护:

    • 线程池:用于执行 TaskRunner 线程。
    • Running tasks map:跟踪正在执行的 Task。
    • Actor:接收来自 SchedulerBackend 的事件处理。

    3.2 SchedulerBackend

    作为 TaskScheduler 的下层接口,SchedulerBackend 的主要职能是:

  • 向 TaskScheduler 提供可用资源。
  • 启动和管理 Executor 进程。
  • 处理任务状态更新和资源调整。
  • 四、Spark 在不同集群中的运行架构

    4.1 Spark on Standalone

    Standalone 模式是 Spark 的自带资源调度框架,主要节点包括 Master 和 Worker。运行流程如下:

  • 提交任务后,SparkContext 初始化 DAGScheduler 和 TaskScheduler。
  • TaskScheduler 向 Master申请资源,并启动 Executor 进程。
  • Executor 接收任务并执行,向 SparkContext 报告执行状态。
  • 资源释放后,SparkContext 关闭相关组件。
  • 4.2 Spark on YARN

    YARN 是一种统一资源管理机制,支持多种计算框架。Spark on YARN 模式分为两种:

  • YARN-Client 模式:Driver 在本地运行,通过 RPC 与 YARN 资源管理器通信。
  • YARN-Cluster 模式:Driver 运行在集群中的 Application Master 节点,负责资源申请和任务监督。
  • 五、运行模式对比

    • Standalone 模式:适合内部化管理,资源隔离度高。
    • YARN-Client 模式:适合需要交互式操作的场景,资源隔离度较低。
    • YARN-Cluster 模式:适合长时间运行的批量任务,资源管理更加弹性。

    通过以上分析可以看出,Spark 在不同集群模式下的实现细节虽然存在差异,但其核心目标是为用户提供高效、灵活的数据处理能力。理解这些细节对于优化资源利用和解决运行时问题至关重要。

    转载地址:http://dfig.baihongyu.com/

    你可能感兴趣的文章
    实例:使用OKGO下载网络压缩包资源,然后解压缩放在本地使用
    查看>>
    Android主题和样式精炼详解
    查看>>
    HDFS Missing Block诊断信息的改进
    查看>>
    解决mybatis嵌套查询使用PageHelper分页不准确
    查看>>
    Redis源码分析(七)--- zipmap压缩图
    查看>>
    大规模集群自动化部署工具--Chef的安装部署
    查看>>
    一致性哈希算法
    查看>>
    HDFS源码分析(六)-----租约
    查看>>
    自定义Hive Sql Job分析工具
    查看>>
    聊聊HDFS RBF第二阶段的主要改进
    查看>>
    公司如何使用开源软件
    查看>>
    【MySQL】(九)触发器
    查看>>
    关于Altium Designer 09导出BOM表不能正确分类问题
    查看>>
    Oracle 11G环境配置
    查看>>
    【Spark】(六)Spark 运行流程
    查看>>
    你还不会在CentOS7上安装Docker嘛?
    查看>>
    Docker命令锦集
    查看>>
    【Python】(十二)IO 文件处理
    查看>>
    【Oozie】(三)Oozie 使用实战教学,带你快速上手!
    查看>>
    师兄面试遇到这条 SQL 数据分析题,差点含泪而归!
    查看>>