2024.1.3 Spark架构角色和提交任务流程

目录

[一 . Yarn的角色回顾](#一 . Yarn的角色回顾)

二、Spark提交任务流程

[1、Spark On Standalone](#1、Spark On Standalone)

[2. Spark on Yarn](#2. Spark on Yarn)

[三. Spark 比MapReduce执行效率高的原因](#三. Spark 比MapReduce执行效率高的原因)

四.Spark的排序算子


一 . Yarn的角色回顾

资源管理层面

集群资源管理者(Master) : ResourceManager

单机资源管理者(Worker) : NodeManager

任务计算层面

单任务管理者(Master) : ApplicationMaster

单位执行者(Worker) : Task (容器内计算框架的工作角色)

Spark中有多个角色,每个角色都有不同的功能和责任。以下是Spark中常见的角色:

  1. Driver:驱动程序是Spark应用程序的主要组件,负责定义应用程序的逻辑和控制执行流程。它将应用程序转化为任务,并将任务分发给集群中的执行器进行执行。

  2. Executor:执行器是在集群中运行的工作进程,负责执行驱动程序分发的任务。每个执行器都有自己的资源,包括CPU和内存,并且可以同时执行多个任务。

  3. Master:主节点是Spark集群的管理节点,负责分配任务给各个执行器,并监控它们的状态。它还负责维护集群的元数据信息,如应用程序的进度和资源分配情况。

  4. Worker:工作节点是集群中的计算资源提供者,负责接收和执行任务。它们通过与主节点通信来接收任务,并将任务分配给执行器进行执行。

  5. Cluster Manager:集群管理器是负责管理整个Spark集群的组件,它可以是Standalone模式下的Spark自带的集群管理器,也可以是其他第三方集群管理器,如YARN或Mesos。

  6. Application:应用程序是由驱动程序和执行器组成的Spark任务的集合。它定义了数据处理和计算逻辑,并通过驱动程序将任务分发给执行器进行执行。

  7. Task:任务是应用程序中的最小执行单元,由驱动程序定义并分发给执行器进行执行。每个任务都会处理一部分数据,并生成中间结果或最终结果。

  8. Stage:阶段是一组相互依赖的任务的集合,它们可以并行执行。Spark将应用程序的任务划分为多个阶段,以便更好地利用并行计算能力。

  9. RDD:弹性分布式数据集(RDD)是Spark中的核心数据抽象,它是一个可分区、可并行计算的数据集合。RDD可以在内存中缓存,并支持容错和恢复。

  10. DataFrame:DataFrame是一种以表格形式组织的分布式数据集,类似于关系型数据库中的表。它提供了丰富的数据操作和查询功能,并支持多种数据格式。

二、Spark提交任务流程

1、Spark On Standalone

  1. spark集群启动后,Worker向Master注册信息

  2. spark-submit命令提交程序后,driver和application也会向Master注册信息

  3. 创建SparkContext对象:主要的对象包含DAGScheduler和TaskScheduler

  4. Driver把Application信息注册给Master后,Master会根据App信息去Worker节点启动Executor

  5. Executor内部会创建运行task的线程池,然后把启动的Executor反向注册给Dirver

  6. DAGScheduler:负责把Spark作业转换成Stage的DAG(Directed Acyclic Graph有向无环图),根据宽窄依赖切分Stage,然后把Stage封装成TaskSet的形式发送个TaskScheduler; 同时DAGScheduler还会处理由于Shuffle数据丢失导致的失败;

  7. TaskScheduler:维护所有TaskSet,分发Task给各个节点的Executor(根据数据本地化策略分发Task),监控task的运行状态,负责重试失败的task;

  8. 所有task运行完成后,SparkContext向Master注销,释放资源;

2. Spark on Yarn

Spark On Yarn的本质?

Master角色由YARN的ResourceManager担任。

Worker角色由YARN的NodeManager担任。

Driver角色运行在YARN容器内 或 提交任务的客户端进程中,真正干活的Executor运行在YARN提供的容器内。

Spark on yarn运行过程,为什么需要将jar包上传到hdfs:

因为集群环境中,只有node1安装了Spark环境,node2和node3都没有安装,所以node2和node3要运行Spark的时候,会先去hdfs中把Jar包下载到本地进行缓存,所以node2和node3才可以运行Spark

三. Spark 比MapReduce执行效率高的原因

1.内存计算:Spark将反复使用的数据缓存在内存中,减少了数据加载的耗时,相比之下,MapReduce将中间结果保存在文件中,需要频繁地进行磁盘读写操作,导致性能较低

2.数据交换:Spark使用内存进行数据交换,而MapReduce需要将数据写入磁盘再进行读取,这样的过程会增加IO开销,因此,Spark在数据交换方面更快.

3.DAG计算模型:Spark采用DAG(有向无环图)计算模型,可以将多个任务合并为一个DAG图,从而减少了任务之间的数据传输和磁盘读写.而MapReduce每个任务之间都需要进行磁盘读写,导致效率较低

综上所述,Spark通过内存计算,数据交换和DAG计算模型等方式提高了执行效率,相比之下,MapReduce在可靠性和内存占用方面更优,但性能较低

四.Spark的排序算子

sortByKey :对数据按照Key键进行排序

sortBy : 根据自定义规则对数据进行排序

top : 对数据进行降序排序,然后取前N个元素,返回的结果是List列表

相关推荐
一只编程菜鸟2 分钟前
Java + easyexcel 新旧数据对比,单元格值标红
java·开发语言
TDengine (老段)4 分钟前
TDengine 基础功能——数据写入
大数据·数据库·物联网·oracle·时序数据库·tdengine·涛思数据
一晌小贪欢9 分钟前
【Python办公】使用pandas批量读取csv保存为Excel
python·excel·pandas·读取excel·python办公·excel转csv
fs哆哆39 分钟前
在VB.net中,用正则表达式方法清除干扰符号方法
开发语言·正则表达式·c#·.net
Nina_71743 分钟前
Day 48
python
工业互联网专业1 小时前
基于Python的热门微博数据可视化分析-Flask+Vue
vue.js·python·flask·毕业设计·源码·课程设计·微博数据可视化
嵌入式@秋刀鱼1 小时前
《 第三章-招式初成》 C++修炼生涯笔记(基础篇)程序流程结构
linux·开发语言·数据结构·c++·笔记·visual studio code
蜗牛编程之路1 小时前
RabbitMQ的使用--项目创建、五种工作模式、高级特性
数据库·分布式·rabbitmq
shenyan~1 小时前
关于 WASM: WASM + JS 混合逆向流程
开发语言·javascript·wasm
Spider_Man1 小时前
让AI“动手”帮你查股票?一文带你玩转大模型 FunctionCall!
python·llm·openai