博客
关于我
【Spark】(六)Spark 运行流程
阅读量:359 次
发布时间: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/

    你可能感兴趣的文章
    babel预设、插件和webpack中运行
    查看>>
    Vue学习—深入剖析渲染函数
    查看>>
    Vue学习—深入剖析函数式组件
    查看>>
    简单Makefile的编写
    查看>>
    使用BAT批处理 匹配查找指定文件夹,并在当文件夹下创建空文件
    查看>>
    wxpython的Hello,World代码探索
    查看>>
    【数字图像处理】OpenCV3 学习笔记
    查看>>
    【单片机开发】智能小车工程(经验总结)
    查看>>
    【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
    查看>>
    iptables NAT表之SNAT、DNAT、REDIRECT介绍
    查看>>
    KeepAlived介绍、配置示例、KeepAlived配置IPVS、调用脚本进行监控
    查看>>
    web服务器处理网络请求过程、I/O与I/O模型介绍、select、poll、epoll介绍
    查看>>
    【Numpy学习】np.count_nonzero()用法解析
    查看>>
    Scala集合-数组、元组
    查看>>
    Flink Standalone集群安装和部署
    查看>>
    JAVA网络爬虫01-http client爬取网络内容
    查看>>
    04 程序流程控制
    查看>>
    java并发编程(1)
    查看>>
    C++&&STL
    查看>>
    双指针算法思想
    查看>>