盒子
盒子
文章目录
  1. 概念
  2. Spark 应用程序架构
    1. 1. Spark Driver
      1. 1.1 SparkContext
      2. 1.2 应用程序执行计划
      3. 1.3 应用程序的调度
      4. 1.4 其他功能
    2. 2. Executor 和 worker
    3. 3. Master 和 Cluster Manager
      1. 3.1 Master
      2. 3.2 Cluster Manager(集群管理器)

Spark 概念及应用程序架构

概念

  1. Spark是计算框架,不是存储框架。类似Hadoop中的MR

  2. Spark是分布式的内存计算框架,Spark在计算的时候,内存不够用,数据会写到磁盘。

  3. Spark和Hadoop没有必然联系,两者是独立的。

  4. Spark可以读取HDFS / fileSystem / DB / Kafka / Flume上的数据,可以把数据写到HDFS / fileSystem / DB / Kafka / Flume中。

  5. Spark可以使用YARN做资源调度管理器 Spark on YARN。

  6. 数据不动代码动

  7. Spark架构:Master Slave架构,主从架构,一主多从。

  8. 主从架构的突出问题是 单点故障,HA(高可用)架构就是为了解决单点故障,心跳消息。

  9. 主主架构:Flume,Kafka

  10. 数据本地性:计算时从最近的节点读取数据。

  11. 粗粒度、细粒度
    指的是资源分配方式。
    粗粒度:应用启动,资源就分配给你,你用不用都是你的。
    细粒度:不提前分配资源,你需要的时候再给你。

  12. Spark两种算子 TransformationAction
    Transformation算子返回值是 RDD,Action算子返回值是计算结果,不是RDD。

  13. Spark 有四种部署方式:Standalone / Spark on YARN / Apache Mesos / Kubernetes

  14. Spark Shell 是Spark提供的本地交互式脚本,默认启动时Local模式,使用Scala语言。

Scala 一行代码实现 wordcount

1
textFile.flatMap(line=>line.split(" ")).map(word=>(word,1)).reduceByKey(_+_).sortBy(_._2,false).collect().foreach(println)

Spark 应用程序架构

  1. Spark 应用程序组件:driver, the master, the cluster manager 和运行在worker节点的executor(s)
    Spark 应用程序架构.png
    所有Spark组件,包括 driver, master 和 executor进程,都在JVM中运行。使用Scala编写的Spark程序编译为Java字节码在JVM上运行。

  2. 区分Spark运行时应用程序组件 和运行它们的位置和节点类型是很重要的。使用不同的部署模式,这些组件可能运行在不同的位置,所以不要以物理节点或实例的形式考虑这些组件。

1. Spark Driver

    Spark 应用程序由一个 driver 进程(驱动程序)和一组 executor 进程组成。Spark 应用程序的生命周期从 Spark Driver 程序开始(和结束)。driver 进程负责运行你的 main 函数,此进程位于集群中的一个 节点上。主要负责三件事:

  1. 维护有关 Spark 应用程序的信息;
  2. 响应用户的程序或输入;
  3. 分配和调度 executor 的 task 和资源。

executors 进程实际执行 driver 分配给他们的工作。这意味着每个 executor 主要负责两件事:

  1. 执行由驱动程序分配给它的代码。
  2. 将执行器 executor 的计算状态报告给 driver 节点。

1.1 SparkContext

Spark Driver 程序负责创建 SparkContext。 SparkContext 在 Spark Shell 中对应的变量名为 sc,用于连接 Spark 集群,是与 Spark 集群交互的入口。SparkContext 在 Spark 应用程序(包括 Spark Shell)的开始实例化,并用于整个程序。

1.2 应用程序执行计划

Driver 程序的主要功能之一是规划应用程序的执行。驱动程序接受所有请求的 transformation 和 action 操作,并创建一个有向无环图(DAG)。
:DAG 是计算机科学中常用的表示数据流及其依赖关系的数学结构。DAGs 包含节点和边,节点表示执行计划中的步骤。DAG中的边以定向的方式将一个节点连接到另一个顶点,这样就不会出现 循环引用。

DAG 由 task 和 stages 组成。task 是 Spark 程序中可调度工作的最小单位。stage是一组可以一起运行的task。多个stage之间是相互依存的 。shuffle是划分stage的依据。

在进程调度意义上,DAGs 并不是 Spark 独有的。例如,它们被用于其他大数据生态系统项目,如 Tez、Drill 和 Presto 的任务调度。DAGs 是 Spark 的基础!!!

1.3 应用程序的调度

driver 程序还协调 DAG 中定义的 stage 和 task 的运行。在调度和运行 task 时涉及的主要driver 程序活动包括:

  • 跟踪可用资源以执行 task
  • 调度任务,以便在可能的情况下 “接近”数据运行——数据本地性
  • 协调数据在 stages 之间的移动

1.4 其他功能

除了计划和编排 Spark 程序的执行之外,驱动程序还负责从应用程序返回结果。
driver 程序在4040端口上自动创建了应用程序 UI。如果在同一个主机上启动后续应用程序,则会为应用程序 UI 使用连续的端口(例如 4041, 4042 等)。

2. Executor 和 worker

Spark executor 是运行来自 Spark DAG 的task 进程。executor 在 Spark 集群中的worker 节点上获取 CPU和内存等计算资源。executor 专用于特定的 Spark 应用程序,并在 应用程序完成时终止。在 Spark 程序中,Spark executor 可以运行成百上千个 task。

通常情况下,worker 节点(承载 executor 进程)具有有限或固定数量的 executor。因此,一个 spark 集群(包括一定数量的服务器节点)具有有限数量的 executor,可以分配它们来运行 Spark 任务。

Spark executor 驻留在 JVM 中。executor 的 JVM 分配了一个堆内存,这是一个用于存储和管理对象的专用内存空间。堆内存的大小由 spark 配置文件 spark-default.xml 中的 spark.executor.memory 属性确定,或者 由提交应用程序时 spark-submit 的参数 –executor-memroy 确定。

worker 和 executor 只知道分配给他们的 task,而 driver 程序负责理解组成应用程序的完整 task 集合它们各自的依赖关系。

3. Master 和 Cluster Manager

Spark driver 程序计划并协调运行 Spark 应用程序所需的 task 集。task 本身在 executor 中运行,executor 驻留在 worker 节点上。

Master 和 Cluster Manager 是监控、分配、回收集群(Executor 运行的节点)资源的核心进程,Master 和 Cluster Manager 可以是各自独立的进程(Spark On YARN),也可以组合成一个进程(Standalone 运行模式)。

3.1 Master

Spark master 是用于请求集群中的资源并将这些资源提供给 Spark driver 程序的进程。在两种部署模式中,master 节点都与 worker 节点或slave 节点协商资源或容器,并跟踪 它们的状态并监视它们的进展。

Spark master 进程在 master 进程所在主机上的端口 8080 上,提供 web 用户界面。

:要区分 driver 进程和 master 进程在 Spark 程序运行时的作用。master 只是请求 资源,并使这些资源在应用程序的生命周期内对驱动程序可用。尽管 master 监控这些资源的状态和健康状况,但是它不参与应用程序的执行以及 task 和 stage 的协调。

3.2 Cluster Manager(集群管理器)

Cluster Manager 进程负责监控分配给 worker 节点上的资源,这些资源是 master 进程请求分配的。然后,master 以 Executor 的形式将这些集群资源提供给 driver 程序。如前所述,Cluster Manager可以独立于 master 进程(Spark On YARN),也可以组合成一个进程(Standalone 运行模式)。

支持一下
扫一扫,支持forsigner
  • 微信扫一扫
  • 支付宝扫一扫