Spark运行架构

这篇具有很好参考价值的文章主要介绍了Spark运行架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Spark是什么

  • Spark 是用于大规模数据处理的统一分析引擎。
  • 可以对结构化、半结构化、非结构化等各种类型的数据数据结构进行自定义计算。
  • 也支持Python、Java、Scala、R以及SQL语言去开发应用程序计算数据。

spark架构,spark,架构,大数据
Spark借鉴了MapReduce思想发展而来,保留了其分布式并行计算得优点并改进了其明显的缺陷。让中间数据存储在内存中提高了运行速度、并提供丰富的操作数据的API提高了开发速度。

二、运行架构

Spark框架的核心是一个计算引擎,整体来说,它采用了标准的master-slave的结构
图所示:展示了一个Spark执行时的基本架构,图中的Driver表示master,负责管理整个集群中的作业任务调度。图中的Executor则是slave,负责实际执行任务。
spark架构,spark,架构,大数据Spark运行架构由三个主要组件组成:Driver节点、Cluster Manager和Executor节点。

  1. Driver节点是应用程序的入口点,它负责解析用户的应用程序代码,并将任务划分成一系列的任务(stage),以及在集群上为任务安排调度。Driver节点负责管理各个任务之间的依赖关系,并将它们转换成一个可执行的物理执行计划(DAG)
  2. Cluster Manager负责在集群中为应用程序分配资源。它可以是Standalone,YARN或Mesos等。
  3. Executor节点负责在工作节点上执行任务。每个Executor都运行在自己的JVM进程中,并且为应用程序分配了一定数量的内存和CPU资源。Executor在运行过程中负责接收和执行任务。

三、核心组件

3.1、Driver

Spark驱动器节点,用于执行Spark任务中的main方法,负责实际代码的执行工作。
Driver在Spark作业执行时主要负责:

  • 将用户程序转化为作业(job)
  • 在Executor之间调度任务(task)
  • 跟踪Executor的执行情况
  • 通过UI展示查询运行情况

事实上,我们无法描述Driver的定义,因为在整个编程过程中没有看到任何有关Driver到的字眼,所以简单理解,所谓的Driver就是驱使整个应用运行起来的程序,也称为:Driver类。

3.1、Executor

Spark Executor是集群中工作节点(Worker)中的一个JVM进程,负责在Spark作业中运行具体任务(Task),任务彼此之间相互独立。Spark应用启动时,Executor节点被同时启动,并且始终伴随着整个Spark应用的生命周期而存在。如果Executor节点发生了故障或崩溃,Spark应用也可以继续执行,会将出错节点上的任务调度到其他的Executor节点上继续运行。
Executor有两个核心功能:

  • 负责运行组成Spark应用的任务,并将结果返回给驱动器进程。
  • 它们通过自身的块管理(Block Manager)为用户程序中要求缓存的RDD提供内存式存储。RDD是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

3.2、Master&Worker

Spark集群的独立部署环境中,不需要依赖其他的资源调度框架,自身就实现了资源调度的功能,所以环境中还有其他两个核心组件:Master和Worker,这里的Master是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责,类似于Yarn环境中的RM,而Worker,也是进程,一个Worker运行在及群众的一台服务器上,由Master分配资源对数据进行并行的处理和计算,类似于Yarn环境中的NM。

3.3、ApplicationMaster

在Spark on Yarn模式下,ApplicationMaster是一个管理运行在YARN集群上的SparkApplication的核心组件。当用户提交一个SparkApplication时,YARN ResourceManager会为该Application分配一个ApplicationMaster。
ApplicationMaster负责以下任务:

  • 申请和分配资源:ApplicationMaster向YARN ResouceManager请求资源,例如CPU和内存。在申请资源时,它会考虑当前集群资源的可用性和已经申请的资源。一旦资源被分配,ApplicationMaster会通过Spark Driver向集群中的Executor发起任务。
  • 监控任务:一旦Executor启动,ApplicationMaster会持续监控Executor的状态,并在Executor失效或异常退出时进行处理。
  • 与Driver通信:ApplicationMaster与Spark Driver之间通过RPC协议通信,用于任务的调度,监控以及结果的收集。

四、核心模块

spark架构,spark,架构,大数据

  • Spark Core:Spark的基础组件,提供了分布式任务调度、内存管理、错误恢复和存储系统的交互等功能
  • Spark SQL:Spark的结构化数据处理组件,支持SQL查询和与外部数据源的集成,还提供了DataFrame和DataSet API,用于以编程方式处理结构化数据。
  • Spark Streaming:Spark的流处理组件,支持以近实时的方式处理流式数据。
  • MLlib:Spark的机器学习库,提供了常见的机器学习算法和工具。
  • GraphX:Spark的图计算库,提供了图处理算法和工具。

五、核心概念

5.1、Executor

  • 在Spark中,Executor是运行在集群节点上的工作进程,用于执行任务和计算数据。每个应用程序都会在集群上启动一些Executor,这些Executor会在需要的时候启动或停止,以适应应用程序的负载。
  • 每个Executor都是一个JVM进程,它们之间是互相独立的,不共享内存,通过网络进行通信。Executor从Driver接收任务,然后将任务分配给自己的线程池进行执行。在执行过程中,Executor可以从Driver处请求数据,并在处理完数据后将结果返回给Driver
  • Executor的数量和大小可以通过配置文件进行设置,具体的设置会根据应用程序的需求而不同。Executor的数量和大小决定了应用程序的并行度和吞吐量,因此需要根据实际情况进行调整。

修改应用程序相关启动参数

名称 说明
–num-executors 配置Executor的数量
–executor-memory 配置每个Executor的内存大小
–executor-cores 配置每个Executor的虚拟CPU core数量

5.2、并行度(Parallelism)

在Spark中,并行度(Parallelism)指的是在同一时间内可以同时处理的任务数量。在Spark中,并行度可以通过调整分区(partition)数来控制。一个RDD的分区数决定了该RDD能够被同时处理的任务数量进而影响Spark作业的执行效率。
如果RDD中的分区数量小于集群中的CPU核心数量,则可能无法充分利用集群中的CPU核心数量,则可以导致任务键频繁地发生切换,从而也会降低Spark作业的执行效率。
因此,对于一个RDD,我们需要根据数据的规模、处理复杂度、计算资源等因素来确定合适的分区数,以充分利用集群中的资源,提高Spark作业的执行效率。可以通过repartition()和coalesce()等方法来调整RDD的分区数。

5.3、有向无环图(DAG)

spark架构,spark,架构,大数据

在Spark中,DAG代表着一个有向无环图(Directed Acyclic Graph),它被用来表示Spark中的各种数据转换和动作操作。DAG中的节点代表着数据源(如RDD)、中间转换操作(如map、filter等)和行动操作(如count、collect等),代表着依赖关系。
当Spark应用程序执行时,每个RDD都可以看作一个节点,RDD之间的依赖关系可以看作边。Spark通过构建DAG来进行作业调度,以确定哪些任务需要在哪个节点上执行。Spark通过构建DAG来进行作业调度,以确定哪些任务需要在哪个节点上执行。Spark会将DAG拆分为多个阶段(stage),每个阶段包含一组可以并行执行的任务。每个阶段都有一个特定的数据划分和计算任务,通常涉及一个或多个父RDD到一个或多个子RDD的转换。
在DAG执行过程中,Spark会先执行所有父RDD的所有任务,然后再执行子RDD的任务,以确保数据在计算过程中的正确传递。Spark使用DAG调度器来确定如何拆分为DAG为多个阶段,并将任务分配给可用的执行器节点,以实现高效的任务并行执行。

六、提交流程

spark架构,spark,架构,大数据

6.1、Yarn Client模式

Client模式将用于监控和调度的Driver模块在客户端执行,而不是Yarn中,所以一般用于测试

  1. Driver在任务提交的本地机器上运行。
  2. Dirver启动后会和ResourceManager通讯申请启动ApplicationMaster。
  3. ResourceManager分配container,在合适的NodeManager上启动ApplicationMaster,负责向ResourceManager申请过Executor内存。
  4. ResouceManager接到ApplicationMaster的资源申请后会分配container,然后ApplicationMaster在资源分配指定的NodeManager上启动Executor进程
  5. Executor进程启动后会向Driver反向注册,Executor全部注册完成后Dirver开始执行main函数。
  6. 之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分stage,每个stage生成对应的TaskSet,之后将task分发到各个Executor上执行。

6.2、Yarn Cluster模式

Cluster模式将用于监控和调度的Driver模块启动在Yarn集群资源中执行。一般应用于实际生产环境。文章来源地址https://www.toymoban.com/news/detail-629266.html

  1. 在Yarn Cluster模式下,任务提交后会和ResouceManager通讯申请启动ApplicationMaster。
  2. 随后ResouceManager分配container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster就是Driver。
  3. Driver启动后向ResouceManager申请Executor内存,ResouceManager接到ApplicationMaster的资源申请后会分配container,然后在合适的NodeManager上启动Executor进程。
  4. Executor进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数。
  5. 之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分stage,每个stage生成对应的TaskSet,之后将task分发到各个Executor上执行。

到了这里,关于Spark运行架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云原生架构设计与实现:Spark 在 K8s 上运行的基本原理

    在 Kubernetes(K8s)中,Pod 是最小的可调度单元。当 Spark 任务运行在 K8s 上时,无论是 Driver 还是 Executor 都由一个单独的 Pod 来表示。每个 Pod 都被分配了一个唯一的 IP 地址,并且可以包含一个或多个容器(Container)。Driver 和 Executor 的 JVM 进程都是在这些 Container 中启动、运行

    2024年01月19日
    浏览(47)
  • 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境)】

    视频地址: 尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】 尚硅谷大数据技术Spark教程-笔记02【SparkCore(核心编程、案例实操)】 尚硅谷大数据技术Spark教程-笔记03【SparkSQL(概述、核心编程、

    2023年04月15日
    浏览(53)
  • 【大数据技术Hadoop+Spark】Spark架构、原理、优势、生态系统等讲解(图文解释)

    Spark最初由美国加州伯克利大学(UCBerkeley)的AMP(Algorithms, Machines and People)实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。Spark在诞生之初属于研究性项目,其诸多核心理念均源自学术研究论文。2013年,Spark加

    2024年01月16日
    浏览(50)
  • 《PySpark大数据分析实战》-12.Spark on YARN配置Spark运行在YARN上

    📋 博主简介 💖 作者简介:大家好,我是wux_labs。😜 热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP)、TiDB数据库认证SQL开发专家(PCSD)认证。 通过了微软Azure开发人员、Azure数据工程师、Azure解决

    2024年02月03日
    浏览(53)
  • 大数据之Spark架构设计与工作流程

    Driver Program(驱动器) 驱动器程序负责执行用户的主函数,创建 SparkContext 对象。 它负责构建并优化 DAG(有向无环图),表示 RDD(弹性分布式数据集)操作的执行计划。 驱动器还负责任务的调度,并与集群管理器(如 Hadoop YARN、Apache Mesos 或 Standalone 模式下的 Master 节点)进

    2024年01月20日
    浏览(102)
  • .Net大数据平台Microsoft.Spark环境构建 附可运行源码。

    前言:大什么数据?什么大数据?什么数据大?挖野菜才是正道。  NBNBNB 老资终于可以不用花太多精力搞python了  。 window环境的.Net大数据平台环境构建 附带可运行源码。 windows 安装jdk 相关坑 java jdk1.8.0_221 安装步骤_云草桑的博客-CSDN博客_jdk1.8.0_221  .NET for Apache Spark 使用

    2024年02月09日
    浏览(39)
  • 数据湖架构Hudi(二)Hudi版本0.12源码编译、Hudi集成spark、使用IDEA与spark对hudi表增删改查

    Hadoop 3.1.3 Hive 3.1.2 Flink 1.13.6,scala-2.12 Spark 3.2.2,scala-2.12 2.1.1 环境准备 2.1.2 下载源码包 2.1.3 在pom文件中新增repository加速依赖下载 在pom文件中修改依赖的组件版本: 2.1.4 修改源码兼容hadoop3并添加kafka依赖 Hudi默认依赖的hadoop2,要兼容hadoop3,除了修改版本,还需要修改如下代

    2024年02月06日
    浏览(55)
  • Spark(26):Spark通讯架构

    目录 0. 相关文章链接 1. Spark通信架构概述 2. Spark 通讯架构解析  Spark文章汇总  Spark 中通信框架的发展: Spark 早期版本中采用 Akka 作为内部通信部件。 Spark1.3 中引入 Netty 通信框架,为了解决 Shuffle 的大数据传输问题使用 Spark1.6 中 Akka 和 Netty 可以配置使用。 Netty 完全实现

    2024年02月16日
    浏览(35)
  • 【Spark精讲】Spark任务运行流程

    目录 Spark任务执行流程 Client模式 Cluster模式 Yarn任务运行流程 YARN-CLIENT模式 YARN-CLUSTER模式 ​编辑 故障排查 YARN-CLIENT 模式导致的网卡流量激增问 题 YARN-CLUSTER 模式的 JVM 栈内存溢出无法执行问题         部署模式是根据Drvier和Executor的运行位置的不同划分的。client模式提交

    2024年04月10日
    浏览(88)
  • 处理大数据的基础架构,OLTP和OLAP的区别,数据库与Hadoop、Spark、Hive和Flink大数据技术

    2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金融企业、安全机构啥的,他们必须要用oracle数据库 这oracle比sql安全,强大多了,所以你需要学

    2024年02月08日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包