spark(一):生态机构与运行流程

说明

  • Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLib、SparkR等子项目,Spark是基于内存计算的大数据并行计算框架。除了扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理。Spark 适用于各种各样原先需要多种不同的分布式平台的场景,包括批处理、迭代算法、交互式查询、流处理。通过在一个统一的框架下支持这些不同的计算,Spark 使我们可以简单而低耗地把各种处理流程整合在一起。

spark生态

  • spark现有五个子生态项目,具体功能如下:

Spark Core

  • spark内核,实现了 Spark 的基本功能,包含任务调度、内存管理、错误恢复、与存储系统 交互等模块。Spark Core 中还包含了对弹性分布式数据集(resilient distributed dataset,简称RDD)的 API 定义。

Spark SQL

  • 结构化数据处理组件,支持SQL 或者 Apache Hive 版本的 SQL 方言(HQL)来查询数据。Spark SQL 支持多种数据源,比 如 Hive 表、Parquet 以及 JSON 等。

Spark Streaming

  • 流处理组件,提供操作数据流的 API,并且与 Spark Core 中的 RDD API 高度对应。

Spark MLLib

  • 机器学习组件,提供包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。

Spark Graphx

  • 图计算

spark 架构

整体架构

  • spark 运行架构图如下,遵从分布式主从架构,集群资源控制管理器(Cluster Manager)、多运行作业任务工作节点(Worker Node)、单应用任务控制节点(Driver)和各工作节点负责具体任务的执行进程(Executor)

  • 详细架构流程如下图:

运行流程

  • spark运行流程大概有4步。如下图
  1. 构建 Spark Application 的运行环境,启动 SparkContext,SparkContext 向 Cluster Manager 注册,并申请运行 Executor 资源。
  2. Cluster Manager 为 Executor 分配资源并启动 Executor 进程,Executor 运行情况将随着“心跳”发送到 Cluster Manager 。
  3. SparkContext 构建 DAG 图,将 DAG 图分解成多个 Stage,并把每个 Stage 的 TaskSet(任务集)发送给 Task Scheduler (任务调度器)。Executor 向 SparkContext 申请 Task, Task Scheduler 将 Task 发放给 Executor,同时,SparkContext 将应用程序代码发放给 Executor
  4. Task 在 Executor 上运行,把执行结果反馈给 Task Scheduler,然后再反馈给 DAG Scheduler。运行完毕后写入数据,SparkContext 向 ClusterManager 注销并释放所有资源。

细节说明

  • DAG

    • DAG Scheduler 把一个 Spark 作业转换成 Stage 的 DAG,根据 RDD 和 Stage 之间的关系找出开销最小的调度方法,然后把 Stage 以 TaskSet 的形式提交给 Task Scheduler。此外,DAG Scheduler 还处理由于 Shuffle 数据丢失导致的失败,这有可能需要重新提交运行之前的 Stage。
    • DAG Scheduler 决定运行 Task 的理想位置,并把这些信息传递给下层的 Task Scheduler。
  • Stages

    • 每个 Spark Job 包含一系列 stages
    • Stages 按照数据是否需要 shuffle 来划分(宽依赖)
    • Stages 之间的执行是串行的(除非stage 间计算的RDD不同)
    • 因为 Stages 是串行的,所以 shuffle 越少越好
  • Task Scheduler

    • 维护所有 TaskSet,当 Executor 向 Driver 发送“心跳”时,Task Scheduler 会根据其资源剩余情况分配相应的 Task。另外,Task Scheduler 还维护着所有 Task 的运行状态,重试失败的 Task。
  • Task

    • 每个 stage 包含一系列的 task
    • Task 是并行计算的最小单元
    • 一个 stage 中的所有 task 执行同一段代码逻辑,只是基于不同的数据块
    • 一个 task 只能在一个executor中执行,不能是多个
    • 一个 stage 输出的 partition 数量等于这个 stage 执行 task 的数量
  • partition

    • Spark 中 partition(分区) 可以理解为内存中的一个数据集
    • 一个 partition 对应一个 task,一个 task 对应 一个 executor 中的一个 slot,一个 slot 对应物理资源是一个线程 thread
      • 1 partition = 1 task = 1 slot = 1 thread

总结

  • spark是大数据计算引擎中重要组成部分,悠久的发展历史,奠定很多计算框架的底层逻辑,值得深入学习和研究。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章