Spark调度底层执行原理详解(第35天)

news2024/11/13 23:24:18

系列文章目录

一、Spark应用程序启动与资源申请
二、DAG(有向无环图)的构建与划分
三、Task的生成与调度
四、Task的执行与结果返回
五、监控与容错
六、优化策略

文章目录

  • 系列文章目录
  • 前言
  • 一、Spark应用程序启动与资源申请
    • 1. SparkContext的创建
    • 2. 资源申请
  • 二、DAG(有向无环图)的构建与划分
    • 1. DAG的构建
    • 2. DAG的划分
    • 3. DAG的调度执行
    • 4. DAG调度的优化
  • 三、Task的生成与调度
    • 1. Task的生成
    • 2. Task的调度
  • 四、Task的执行与结果返回
    • 1. Task的执行
    • 2. 结果的返回
  • 五、监控与容错
    • 1. 监控
    • 2. 容错
  • 六、优化策略
    • 1. 内存计算
    • 2. 智能Shuffle机制
    • 3. 资源管理与调度


前言

Spark调度底层执行原理是一个复杂而精细的过程,它涉及到多个组件的交互和协同工作,以实现大数据处理的高效性和灵活性。本文主要对Spark调度底层执行原理进行详细解析。

  • Spark调度底层执行原理详解图
    在这里插入图片描述

一、Spark应用程序启动与资源申请

1. SparkContext的创建

当Spark应用程序启动时,首先会创建SparkContext对象。SparkContext是Spark的入口点,负责初始化与资源管理器(如YARN、Mesos等)的连接,注册应用,并请求分配Executor资源。

2. 资源申请

SparkContext向资源管理器注册并向其申请运行Executor。资源管理器分配Executor资源后,启动Executor进程。这些Executor是Spark在每个Worker节点上启动的进程,负责执行具体的Task。

二、DAG(有向无环图)的构建与划分

Spark的DAG(Directed Acyclic Graph,有向无环图)调度原理是Spark作业调度机制的核心部分,它负责将复杂的作业分解成可并行执行的任务集,并通过任务调度器进行高效执行。以下是Spark DAG调度原理的详细解释:
在这里插入图片描述

1. DAG的构建

用户代码中包含Transformations(转换操作)和Actions(行动操作)时,Spark会构建一个DAG来表示RDD(弹性分布式数据集)之间的依赖关系。这些依赖关系决定了数据处理的流程。

  • RDD的依赖关系:
    在Spark中,RDD(弹性分布式数据集)是数据处理的基本单位。RDD之间的依赖关系决定了数据处理的流程和顺序。这些依赖关系是有向的,总是由子RDD指向父RDD。
  • DAG的生成:
    当用户提交一个Spark作业时,Spark会根据RDD之间的依赖关系构建一个DAG。这个DAG表示了作业中所有RDD之间的转换和行动操作,以及它们之间的数据流动关系。

2. DAG的划分

  • DAG Scheduler负责将DAG划分为多个Stage(阶段)。Stage的划分依据是RDD依赖关系中的宽依赖(如shuffle操作)。宽依赖标志着数据重分布的需求,自然成为Stage的边界。每个Stage包含一组可以并行执行的Task。
  • Stage的划分:
    如果RDD之间的依赖是窄依赖(即一个父RDD的分区只会被一个子RDD的分区使用),则它们会被划分到同一个Stage中。如果依赖是宽依赖(即一个父RDD的分区会被多个子RDD的分区使用,通常涉及shuffle操作),则会在宽依赖处进行Stage的划分。
    Task的生成:
    每个Stage会被进一步划分为多个Task(任务)。这些Task是Spark实际执行的最小单元,它们将被分发到集群中的Executor上执行。

3. DAG的调度执行

  1. Task的提交与执行:
    DAG Scheduler将划分好的Stage提交给Task Scheduler。Task Scheduler负责将Stage中的Task分发到集群的Executor上执行。Executor多线程地执行Task,每个线程负责一个Task。
  2. 执行结果的收集:
    当Task执行完成后,会将结果返回给Task Scheduler。Task Scheduler将结果汇总后,通知DAG Scheduler。DAG Scheduler根据Task的执行结果和Stage的依赖关系,决定是否提交下一个Stage执行。
  3. 容错与重试:
    如果某个Task执行失败,Task Scheduler会负责重试该Task。如果某个Stage中的所有Task都执行失败,DAG Scheduler会重新提交该Stage执行。这种容错机制保证了Spark作业的健壮性和可靠性。

4. DAG调度的优化

  1. 本地性优化:
    Spark在调度Task时,会尽量将Task分配到存储了所需数据的节点上执行,以减少数据的网络传输开销。这种本地性优化策略提高了Spark作业的执行效率。
  2. 资源动态分配:
    Spark支持资源的动态分配,即根据作业的执行情况和集群的负载情况动态调整Executor的数量和资源。这种动态分配策略有助于充分利用集群资源,提高资源利用率。
    综上所述,Spark的DAG调度原理是一个复杂而高效的过程,它通过将作业分解成可并行执行的Stage和Task,并利用DAG Scheduler和Task Scheduler进行高效的调度执行。同时,Spark还通过本地性优化和资源动态分配等策略来优化DAG调度的性能。

三、Task的生成与调度

1. Task的生成

DAG Scheduler将每个Stage转换为一个或多个TaskSet(任务集),Task Scheduler负责将这些TaskSet分配到各个Executor上执行。

2. Task的调度

Task Scheduler接收DAG Scheduler提交过来的TaskSet,并将Task分发到集群中的Executor上运行。Executor多线程地执行Task,每个线程负责一个Task。

四、Task的执行与结果返回

1. Task的执行

Task在Executor上执行,处理数据,并将结果返回给Driver。对于ShuffleMapTask,计算结果会写入BlockManager中,并返回给DAG Scheduler一个MapStatus对象,存储BlockManager的基本信息,这些信息将成为下一个阶段任务获取输入数据的依据。

2. 结果的返回

对于ResultTask(最终任务),返回的是func函数的计算结果。这些结果会被发送到Driver端,供用户程序进一步处理或展示。

五、监控与容错

1. 监控

DAGScheduler监控Job与Task的完成情况,通过回调函数接收TaskScheduler的通知,了解任务的开始、结束、失败等信息,以维护作业和调度阶段的状态信息。

2. 容错

如果某个Executor失败,DAGScheduler会根据RDD的依赖关系重新计算丢失的分区。Spark通过RDD的Lineage(血统)进行容错,确保数据的完整性和一致性。

六、优化策略

1. 内存计算

Spark利用内存进行计算加速,通过存储RDD的分区在内存中来避免频繁的磁盘读写。这大大提高了数据处理的效率。

2. 智能Shuffle机制

在涉及宽依赖的Stage间,数据需经过Shuffle过程重分布。Spark使用了基于排序的Shuffle机制,优化了数据处理的效率和内存使用。

3. 资源管理与调度

Spark通过智能的资源管理与调度策略,如FIFO调度策略等,确保任务的高效执行。同时,Spark还优化了数据处理的本地性,优先安排Task在数据所在的节点上执行,以减少网络传输和提高执行效率。
综上所述,Spark调度底层执行原理是一个复杂而精细的过程,它通过高度优化的DAG执行模型、内存计算、智能的Shuffle机制和强大的资源管理与调度策略,实现了大数据处理的高效性和灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1925148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python:绘制一元四次函数的曲线

编写 test_x4_x2_4x.py 如下 # -*- coding: utf-8 -*- """ 绘制函数 y x^4x^24x-3 在 -2<x<2 的曲线 """ import numpy as np from matplotlib import pyplot as plt# 用于正常显示中文标题&#xff0c;负号 plt.rcParams[font.sans-s…

值得关注的数据资产入表

不错的讲解视频&#xff0c;来自&#xff1a;第122期-杜海博士-《数据资源入表及数据资产化》-大数据百家讲坛-厦门大学数据库实验室主办第122期-杜海博士-《数据资源入表及数据资产化》-大数据百家讲坛-厦门大学数据库实验室主办-20240708_哔哩哔哩_bilibili

《昇思25天学习打卡营第20天|onereal》

应用实践/LLM原理和实践/基于MindSpore的GPT2文本摘要 基于MindSpore的GPT2文本摘要 数据集加载与处理 数据集加载 本次实验使用的是nlpcc2017摘要数据&#xff0c;内容为新闻正文及其摘要&#xff0c;总计50000个样本。 数据预处理 原始数据格式&#xff1a; article: [CLS…

java框架-springmvc

文章目录 2. Springmvc概述3. springmvc与struts2不同5. springmvc入门6. springmvc 配置7. Handler配置8. 异常处理器9. ssm整合思路10. 上传图片11. RESTful支持12. 拦截器总结 2. Springmvc概述 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分 3. sp…

QML 鼠标和键盘事件

学习目标&#xff1a;Qml 鼠标和键盘事件 学习内容 1、QML 鼠标事件处理QML 直接提供 MouseArea 来捕获鼠标事件&#xff0c;该操作必须配合Rectangle 获取指定区域内的鼠标事件, 2、QML 键盘事件处理&#xff0c;并且获取对OML直接通过键盘事件 Keys 监控键盘任意按键应的消…

防御第二次作业完成接口配置实验

一、实验括扑图 二、实验要求 1.防火墙向下使用子接口分别对应生产区和办公区 2.所有分区设备可以ping通网关 三、实验思路 1、配置各设备的IP地址 2、划分VLAN及VLAN的相关配置 3、配置路由及安全策略 四、实验步骤 1、配置PC跟Client还有server配置&#xff0…

Hive表【汇总】

提前必备 1、内部表和外部表的区别 概念讲解&#xff1a; 外部表&#xff1a;1、存放他人给予自己的数据2、当我们删除表操作时&#xff0c;会将表的元数据删除&#xff0c;保留数据文件 内部表&#xff1a;1、存放已有的数据2、当我们删除表操作时&#xff0c;会将表的元数据…

LeetCode Day8|● 344.反转字符串(原地) ● 541. 反转字符串II(i可以大步跨越) ● 卡码网:54.替换数字(ACM模式多熟悉熟悉)

字符串part01 day8-1 ● 344.反转字符串整体思路代码实现总结 day8-2 ● 541. 反转字符串II整体思路代码实现总结 day8-3 ● 卡码网&#xff1a;54.替换数字题目解题思路代码实现总结 day8-1 ● 344.反转字符串 整体思路 字符串和数组的思路差不多 原地操作 代码实现 class…

递归解决换零钱问题--代码实现

在上一篇中, 经过深入分析, 已经得出一个能够递归的形式化的结果, 现在则准备给出一个具体实现. 结果回顾 前述结果如下: caseOfChange(amount, cashList) { // base caseif (amount.isNegative()) { // 负数 return 0; } if (amount.isZero()) { // 0元 return 1; }if (cas…

vscode终端(控制台打印乱码)

乱码出现的两种可能&#xff08;重点是下面标题2&#xff09; 1、文件中的汉字本来就是乱码&#xff0c;输出到控制台(终端)那就当然是乱码 在vscode中设置文件的编码格式为UTF-8&#xff0c; 2、输出到控制台(终端)之前的汉字不是乱码&#xff0c;针对此种情况如下设置 原因…

MySQL卸载 - Windows版

MySQL卸载 - Windows版 1. 停止MySQL服务 winR 打开运行&#xff0c;输入 services.msc 点击 “确定” 调出系统服务。 2. 卸载MySQL相关组件 打开控制面板 —> 卸载程序 —> 卸载MySQL相关所有组件 3. 删除MySQL安装目录 4. 删除MySQL数据目录 数据存放目录是在 …

C++从入门到起飞之——缺省参数/函数重载/引用全方位剖析!

目录 1.缺省参数 2. 函数重载 3.引⽤ 3.1 引⽤的概念和定义 3.2 引⽤的特性 3.3 引⽤的使⽤ 3.4 const引⽤ 3.5 指针和引⽤的关系 4.完结散花 个人主页&#xff1a;秋风起&#xff0c;再归来~ C从入门到起飞 个人格言&#xff1a;悟已往之不谏…

端到端自动驾驶系列(一):自动驾驶综述解析

端到端自动驾驶系列(一)&#xff1a;自动驾驶综述解析 End-to-end-Autonomous-Driving Abstract Abstract—The autonomous driving community has witnessed a rapid growth in approaches that embrace an end-to-end algorithm framework, utilizing raw sensor input to …

免费的ssh工具

1.Quickstart - kitty 2 Download Termius for Windows 3. MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Download

基于Android平台开发,备忘录记事本

相关视频教程在某站上面(&#x1f50d;浩宇软件开发) 1. 项目功能思维导图 2. 项目涉及到的技术点 使用CountDownTimer实现开屏页倒计时使用SQLite数据库存储数据使用BottomNavigationView实现底部导航栏使用ActivityFragment实现底部导航栏页面切换使用RecyclerViewadapter实…

【人工智能】线性回归

目录 一、使用正规化方法计算下列样本的预测函数 1. 没有归一化之前 2. 归一化之后 二、读取ex1data2.txt中的数据&#xff0c;建立样本集&#xff0c;使用正规化法获取&#xff08;房屋面积&#xff0c;房间数量&#xff09;与房屋价格间的预测函数 1. 读取数据&#xff…

【OpenCV】BGR三色通道的提取与合并--超详细解读

在OpenCV中&#xff0c;处理图像时经常需要提取或合并图像的RGB&#xff08;红、绿、蓝&#xff09;三色通道。OpenCV默认使用BGR&#xff08;蓝、绿、红&#xff09;顺序来存储图像的颜色通道&#xff0c;这一点与很多图像处理库&#xff08;如PIL/Pillow&#xff09;不同&…

【项目计划】软件项目计划(Word)

项目开发计划包括项目描述、项目组织、成本预算、人力资源估算、设备资源计划、沟通计划、采购计划、风险计划、项目过程定义及项目的进度安排和里程碑、质量计划、数据管理计划、度量和分析计划、监控计划和培训计划等。 软件资料清单列表部分文档&#xff1a; 工作安排任务书…

Renesas R7FA8D1BH (Cortex®-M85) 读取芯片内部温度值

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 FSP和KEIL配置ADC 2.1 ADC硬件接口 2.2 FSP配置ADC 3 软件功能实现 3.1 FSP生成项目 3.2 FSP ADC模块库函数介绍 3.2.1 库函数列表 3.2.2 函数介绍 4 读Temperature sensor 4.1 初始化ADC…

Matlab-Simulink模型保存为图片的方法

有好多种办法将模型保存为图片&#xff0c;这里直接说经常用的 而且贴到Word文档中清晰、操作简单。 simulink自带有截图功能&#xff0c;这两种方法都可以保存模型图片。选择后直接就复制到截切板上了。直接去文档中粘贴就完事了。 这两个格式效果不太一样&#xff0c;第一种清…