spark 架构及运算逻辑

本文介绍了Apache Spark的架构组成及其执行流程。Spark采用Master-Slave模型,包括Master、Worker、Driver和Executor等核心组件。文章详细阐述了Spark应用的提交、资源分配、任务调度及执行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spark的整体流程为:Client 提交应用,Master找到一个Worker启动Driver,Driver向Master或者资源管理器申请资源,之后将应用转化为RDD Graph,再由DAGScheduler将RDD Graph转化为Stage的有向无环图提交给TaskScheduler,由TaskScheduler提交任务给Executor执行。在任务执行的过程中,其他组件协同工作,确保整个应用顺利执行。

Spark架构采用了分布式计算中的Master-Slave模型。Master是对应集群中的含有Master进程的节点(ClusterManager),Slave是集群中含有Worker进程的节点。Master作为整个集群的控制器,负责整个集群的正常运行;Worker相当于是计算节点,接收主节点命令与进行状态汇报;Executor负责任务的执行;Client作为用户的客户端负责提交应用,Driver负责控制一个应用的执行,如图下图:



                                                                                 Spark 框架图

 

Spark集群部署后,需要在主节点和从节点分别启动Master进程和Worker进程,对整个集群进行控制。在一个Spark应用的执行过程中,Driver和Worker是两个重要角色。Driver 程序是应用逻辑执行的起点,负责作业的调度,即Task任务的分发,而多个Worker用来管理计算节点和创建Executor并行处理任务。在执行阶段,Driver会将Task和Task所依赖的file和jar序列化后传递给对应的Worker机器,同时Executor对相应数据分区的任务进行处理。

 

Spark的架构中的基本组件介绍:

ClusterManager:在Standalone模式中即为Master(主节点),控制整个集群,监控Worker。在YARN模式中为资源管理器。

Worker:从节点,负责控制计算节点,启动Executor或Driver。在YARN模式中为NodeManager,负责计算节点的控制。

Driver:运行Application的main()函数并创建SparkContext。

Executor:执行器,在worker node上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executors。

SparkContext:整个应用的上下文,控制应用的生命周期。

RDD:Spark的基本计算单元,一组RDD可形成执行的有向无环图RDD Graph。

DAG Scheduler:实现将Spark作业分解成一到多个Stage,每个Stage根据RDD的Partition个数决定Task的个数,然后生成相应的Task set放到TaskScheduler中。

TaskScheduler:将任务(Task)分发给Executor执行。

Stage:一个Spark作业一般包含一到多个Stage。

Task:一个Stage包含一到多个Task,通过多个Task实现并行运行的功能。

Transformations:转换(Transformations) (如:map, filter, groupBy, join等),Transformations操作是Lazy的,也就是说从一个RDD转换生成另一个RDD的操作不是马上执行,Spark在遇到Transformations操作时只会记录需要这样的操作,并不会去执行,需要等到有Actions操作的时候才会真正启动计算过程进行计算。

Actions:操作(Actions) (如:count, collect, save等),Actions操作会返回结果或把RDD数据写到存储系统中。Actions是触发Spark启动计算的动因。

SparkEnv:线程级别的上下文,存储运行时的重要组件的引用。

SparkEnv内创建并包含如下一些重要组件的引用。

MapOutPutTracker:负责Shuffle元信息的存储。

BroadcastManager:负责广播变量的控制与元信息的存储。

BlockManager:负责存储管理、创建和查找块。

MetricsSystem:监控运行时性能指标信息。

SparkConf:负责存储配置信息。

 



                                                                       Spark运行逻辑图

 

在Spark应用中,整个执行流程在逻辑上会形成有向无环图(DAG)。Action算子触发之后,将所有累积的算子形成一个有向无环图,然后由调度器调度该图上的任务进行运算。Spark的调度方式与MapReduce有所不同。Spark根据RDD之间不同的依赖关系切分形成不同的阶段(Stage),一个阶段包含一系列函数执行流水线。图中的A、B、C、D、E、F分别代表不同的RDD,RDD内的方框代表分区。数据从HDFS输入Spark,形成RDD A和RDD C,RDD C上执行map操作,转换为RDD D, RDD B和 RDD E执行join操作,转换为F,而在B和E连接转化为F的过程中又会执行Shuffle,最后RDD F 通过函数saveAsSequenceFile输出并保存到HDFS或 Hbase中

 

### Apache Spark简介 Apache Spark是一个开源框架引擎,在大数据处理和分析领域以其速度和易用性著称[^2]。它内置了用于图处理、机器学习、流处理以及SQL等功能模块。Spark的执行引擎支持内存计算和循环数据流动,并能够以集群模式或独立模式运行,同时可以访问多种数据源,如HBase、HDFS、Cassandra等。 ### Spark在头条平台上的架构与执行流程 #### 架构概述 对于像今日头条这样的大型互联网公司而言,其基于Spark构建的数据处理平台通常会集成到现有的分布式存储系统中。具体来说: - **资源管理层**:负责管理和调度整个系统的计算资源,可能采用YARN或者Mesos作为底层资源管理工具。 - **应用层**:由多个相互协作的应用程序组成,这些应用程序利用Spark的强大功能来完成各种复杂的ETL任务、实时数据分析以及其他高级运算操作。 #### 执行流程解析 当提交一个作业给Spark时,大致经历如下几个阶段: 1. 驱动程序(Driver Program)接收到用户的请求后,将逻辑计划转换成物理计划; 2. 物理计划被进一步拆解为一系列的任务集(TaskSet),每个任务集中包含了若干个具体的task; 3. 这些tasks会被分发至各个节点上的Executor进程中去执行,而Executors则是在Worker Node上启动的服务进程,专门用来承担实际的工作负载; 4. Executor内部维护着一定数量的核心线程(Core Thread),它们并行地处理来自不同stage的任务实例(Task Instance); 5. 对于涉及到宽依赖(Wide Dependency)的操作,则需要通过Shuffle过程来进行重新分区(Repartitioning),以便后续Stage能顺利获取所需输入数据; 6. 最终结果经过收集(Collect)/保存(Save As...)等方式返回给驱动端供用户查看或存入指定的目标位置。 ```python from pyspark.sql import SparkSession spark = SparkSession.builder.appName("Example").getOrCreate() df = spark.read.json("/path/to/json/files") # 加载JSON文件创建DataFrame对象 result_df = df.groupBy("key_column").count() # 聚合统计每组记录数 result_df.write.parquet("/output/path") # 将结果写入Parquet格式文件 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值