Spark运行架构

本文深入解析了基于Spark的用户程序架构,包括Application、DriverProgram、SparkContext、Executor、ClusterManager、WorkerNode等核心概念及运行流程。重点阐述了Spark在不同部署模式下的运行流程,如SparkStandaloneClientMode与SparkYARNClusterMode,详细描绘了各组件间的交互与资源分配过程。

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

Spark官网展示了如下的集群运行架构

Spark集群运行架构

其中涉及到以下概念:

概念解释
Application基于Spark的用户程序,包含了1个Driver Program和若干个Executor进程
Driver Program运行Application的main()函数并且创建SparkContext,通常用SparkContext代表Driver Program;监听特定端口以保证和executor的通信
SparkContextSpark代码中定义的一个对象,提供driver program的功能
ExecutorApplication运行在worker node上的一个进程,负责运行Task,并且将数据存在内存或者磁盘上,该进程在application运行期间一直驻留;每个Application都有各自独立的executors,不同application的executor若不通过外部存储,是无法进行数据交互的
Cluster Manager在集群上获取资源的外部服务,Spark支持Spark Standalone, YARN, Mesos三种cluster manager;但Spark并不依赖于cluster manager,它只需要能获取executor进程并保持通信就可以了
Worker Node集群中任何可以运行application代码的节点
Task被送到某个executor上的工作单元;不同application的task运行在不同的JVM中,有着良好的隔离
Job包含多个Task组成的并行计算,往往由Spark action催生
Stage每个Job会被拆分很多组task,每组任务被称为Stage,也可称TaskSet
RDDSpark的基本计算单元,可以通过一系列算子进行操作(主要有Transformation和Action操作)
DAG Scheduler根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler
Task Scheduler将stage提交给worker nodes运行并回报结果
Client Deploy Mode在client mode下,drive program直接运行在spark-submit进程中,因为driver与worker node的网络通信是非常重要的开销,所以提交application的主机需要和work node处在同一物理网络中,以获得较小的网络延迟;同时,需要实时交互的应用如Spark Shell,是比较适合用client mode的
Cluster Deploy Mode在cluster mode下,driver program进程由cluster管理,以保证与worker node通信时网路延迟小,所以当用户提交application的设备在集群的网络之外(网络延迟大)的时候,需要用cluster mode来部署;目前YARN只支持Python的cluster部署,而mesos还不能支持cluster部署

Spark Standalone Client Mode 运行流程示意图

Created with Raphaël 2.1.0DAGSchedulerDAGSchedulerSparkContextSparkContextMasterMasterExecutorExecutorTaskSchedulerTaskScheduler在client进程中被创建申请Cpu, Mem资源分配worker资源启动StandaloneExecutorBackend注册发送applicaiton代码DAG图DAG图分解为Stage传送Stage/TaskSet分配Tasksexecutor线程池执行task报告task执行进展,直至完成注销释放worker资源

Spark YARN Cluster Mode 运行流程示意图

Created with Raphaël 2.1.0ClientClientResourceManagerResourceManagerNodeManagerSparkContextNodeManagerSparkContextNodeManagerExecutorNodeManagerExecutorDAGSchedulerDAGSchedulerTaskSchedulerTaskScheduler请求分配ApplicationContainer创建Container创建SparkContext请求分配worker资源分配worker资源创建Container启动StandaloneExecutorBackend注册发送applicaiton代码DAG图DAG图分解为Stage传送Stage/TaskSet分配Tasksexecutor线程池执行task报告task执行进展直至完成注销释放driver资源释放worker资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值