saprk任务运行的各种模式及流程

本文介绍了Spark任务在FI集群中的运行模式,包括local、yarn-client和yarn-cluster模式,并详细解释了每种模式下的任务架构,如Driver、ApplicationMaster和Executor的角色与职责。此外还探讨了不同模式的应用场景。

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

   

saprk任务运行的各种模式及流程

     FI 集群中,支持的 Spark 的任务运行模式有 local,yarn-client,yarn-cluster 等,Spark 任务运行是分布式的,由任务的 Driver 驱动任务的运行,由 Executor 来执行具体的任务。大多情况下,Executor 中执行的代码逻辑需要由用户编写。也就是说 Executor 进程运行的命令由用户编写,相当于用户的执行逻辑与Spark自身的逻辑是耦合的,出现问题之后难以定位分界,此章主要介绍 Spark 任务架构,FI 集群中 Spark 各角色实例介绍及相关日志说明,Spark 任务出现问题后的定位手段,常见的 spark 任务异常问题及解决办法。

Spark- - On- -

一个 Spark 任务主要包含 Driver, ApplicationMaster,Executor 等部分,其中 Driver 负责驱
动任务的运行,把相关的函数封装为 Task 并分发到 Executor, ApplicationMaster 主要与 Yarn
交互负责申请资源启动 Executor,汇总 Executor 信息,Executor 主要负责执行具体的 task。


Yarn- -t client 模式

在 yarn-client 模式下,Spark 任务的 driver 作为一个进程运行在提交任务的节点(不是
由 yarn 启动,不受 yarn 的管理)。ApplicationMaster 作为一个 container 进程启动在集群中
的某个节点上(具体在哪个节点上启动由 Yarn 决定)。ApplicationMaster 作为集群中与 Yarn 交
互的核心向 Yarn 申请资源以启动 Container(Executor),每个 Executor 都作为一个进程,启动
后等待 driver 发送 task 并执行 task。

Yarn-client 模式架构图:


Yarn- -r cluster 模式
    在 yarn-clsuter 模式下,Spark 任务的 driver 和 ApplicationMaster 运行在同一个 container进程中,同时受 yarn 的管理。ApplicationMaster 同样作为一个 container 进程运行在集群中的某个节点上(具体在哪个节点上启动由 Yarn决定),driver作为线程运行在 ApplicationMaster的 container 进程中。ApplicationMaster 作为集群中与 Yarn 交互的核心向 Yarn 申请资源以启动 Container(Executor),每个 Executor 都作为一个进程,启动后等待 driver 发送 task 并执行task。


总结
    spark 任务运行在 yarn 集群中,yarn-client 模式适用于开发测试,driver 直接运行在提交任务的节点,不受 yarn 的控制,便于在控制台观察任务运行状态,在 client 端的进程不能关掉。Yarn-cluster 模式下,任务的相关进程均运行在集群中,受 yarn 的管理,提交任务后,
客户端就可以关闭。

### 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、付费专栏及课程。

余额充值