Spark DAG及内存迭代计算

news2024/11/21 0:24:36

文章目录

    • DAG
      • Job与Action之间的关系
      • DAG和分区
    • DAG宽窄依赖
      • DAG宽窄依赖的划分
    • Spark内存迭代计算
    • 总结
      • Spark是怎么做内存计算的?DAG的作用?Stage阶段划分作用?
      • Spark为什么比MapReduce快?

DAG

  • Spark的核心是根据RDD来实现的,Spark Scheduler则为Spark核心实现的重要一环,其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据,根据RDD的依赖关系构建DAG,基于DAG划分Stage,将每个Stage中的任务发到指定节点运行。基于Spark的任务调度原理,可以合理规划资源利用,做到尽可能用最少的资源高效地完成任务计算。
  • DAG也叫有向无环图,即有方向,没有闭环的图,如下WordCount DAG图所示:
    在这里插入图片描述
  • DAG作用就是表示代码的逻辑执行流程。

Job与Action之间的关系

  • 通常一个Action会产生一个DAG,会在程序中产生一个Job,所以一个Action = 一个DAG = 1个Job。之间的层级关系:1个application中可以包含多个job,每个Job中有一个DAG,每个Job是由一个Action产生的。

DAG和分区

  • DAG是Spark代码的逻辑执行图,这个DAG的最终作用就是为了构建物理上的Spark详细执行计划,所以由于Spark是分布式多分区的,DAG与分区之间还是有关联的。还是以上图WordCount DAG图为例,该图在textFile步骤上就执行3分区,全部的RDD就在3个分区上执行。

DAG宽窄依赖

  • 窄依赖:父RDD的一个分区,全部将数据发给子RDD一个分区。
  • 宽依赖(shuffle):父RDD的一个分区,将数据发给子RDD多个分区。
  • 我们可以看下图来真正地去理解宽窄依赖。
    在这里插入图片描述
    在这里插入图片描述

DAG宽窄依赖的划分

  • Spark根据DAG的宽窄依赖划分为不同的DAG阶段,划分依据是从后往前,遇到宽依赖就会划分出一个阶段,这个阶段也称为stage。如下图所示:
    在这里插入图片描述
  • 该图在DAG中,基于宽依赖,将DAG划分成了2个stage,后面的为stage0,前面的为stage1,在stage内部一定都是窄依赖。

Spark内存迭代计算

  • 根据上图的描述,基于带有分区的DAG以及阶段划分,可以从图中得到逻辑上最优的task分配,一个task是由一个线程来具体执行的,task对于rdd这一条执行的计算过程的直线(纯内存计算)也叫内存计算管道。
  • Spark默认收到了全局并行度的限制,除了个别算子由特殊分区的情况,大部分算子都会遵循全局并行度要求,来规划自己的分区数。Spark一般推荐只设置全局的并行度,不要再算子上再加上并行度(除了一些排序算子外)。

总结

Spark是怎么做内存计算的?DAG的作用?Stage阶段划分作用?

  • Spark会产生DAG图。
  • DAG图会基于分区和宽窄依赖关系划分阶段。
  • 一个阶段内部都是窄依赖,窄依赖内,如果形成前后的1:1的分区对应关系,就可以产生许多内存迭代计算管道。
  • 这些内存迭代计算的管道,就是一个个具体执行的Task。
  • 一个Task就是一个具体的线程,任务跑在一个线程内,就是走内存计算了。

Spark为什么比MapReduce快?

  • 从编程模型上来看,Spark算子多,处理速度快。MR编程模型很难在一套MR中处理复杂任务,需要些多套MR进行串联,多个MR串联通过磁盘交互数据,就很慢。Spark可以执行内存迭代,算子间形成DAG基于依赖划分阶段后,在阶段内形成内存迭代管道,但是MR的交互还是通过磁盘来实现。所以速度就很慢。

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

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

相关文章

cubemx stm32 lu90614模块 人体温度检测模块 可以替代温枪 驱动代码

lu90614 使用串口通信在,指值得注意的是,他的TX接单片机的TX,RX接单片机的RX,和其他的串口设备不一样。 模式切换包 lu90614有两种模式, 一个是物温模式,一个是体温模式(检测人体温度用体温…

【CSDN 竞赛—第10期】所有题目解法的思考和总结

目录 一、 熊孩子拜访 二、 走楼梯 三、括号上色 四、喜水青蛙 一、 熊孩子拜访 已知存在一个长度为n的整数序列A。 A中所有元素按照从小到达的顺序进行排序。 现在执行操作倒置一段序列。 请找到A序列里的倒置子序列。 我的解题思路(通过所有测试用例&#xff0…

[附源码]java毕业设计星期八酒店管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Opengl ES之PBO

叨叨一句几句 关于Opengl的系列已经有较长的一段时间没有更新了,然而这个系列还远没有到完毕地步,后续至少还有关于Opengl矩阵变换、YUV与RGB互转、Opengl水印贴图、Opengl转场动画等主题文章。 断更的主要原因如果给自己找个借口的话可以说是工作比价…

1100w播放、45w涨粉!黑马UP在B站20天逆袭登顶!

在B站生活区里,“搞笑区”的流量独占鳌头,创作者也是络绎不绝。 为此,B站官方对搞笑内容创作布局了长期的扶持计划,比较热门的两个活动“搞笑新星训练营”、“搞笑研究所”是搞笑内容投稿最多的,至今两个活动已经分别…

动手实践丨基于ModelAtrs使用A2C算法制作登月器着陆小游戏

摘要:在本案例中,我们将展示如何基于A2C算法,训练一个LunarLander小游戏。本文分享自华为云社区《使用A2C算法控制登月器着陆》,作者:HWCloudAI 。 LunarLander是一款控制类的小游戏,也是强化学习中常用的…

C# dll代码混淆加密

目录 一、需求 二、用法 1.新建C#项目 2.开始加密 3.常见的错误 4.添加加密规则 5.导出加密dll 6.调用加密dll 结束 一、需求 C# 项目生成 dll,在反编译工具下,好比皇帝的新装,dll 内部的代码看的一清二楚,在这里推荐一…

关于Cy5.5 alkyne,Cyanine7 alkyne和1628790-37-3,1998119-13-3两者的区别

外观以及性质: Cy5.5 alkyne和Cy7alkyne 都含有荧光基团,其中氰基7的炔烃衍生物,近红外荧光团,Cy7的类似物,Cyanine5.5 alkyne用于点击化学标记的远红外/近红外染料炔烃,炔烃可以通过铜催化的点击化学与多种…

Ubuntu 22.04 一次及其繁琐的 允许 Traceroute 探测漏洞修复之旅

前言:允许 Traceroute 探测是绿盟漏洞扫描器报出来的一个漏洞,如下图: 我的系统是ubuntu 22.04,但由于是用户提供的虚拟机,会有些定制的部分,具体定制了哪部分就不知道了,直接描述问题。 解决问…

【服务器数据恢复】LINUX误删除、误格式化的数据恢复

Linux误删除及误格式化的数据恢复方案针对的文件系统: 1 、基于EXT2/EXT3/EXT4文件系统 ; 2 、基于Reiserfs文件系统; 3 、基于Xfs文件系统。 Linux误删除及误格式化的数据恢复解决方案: 一、故障检测: 1、检测是否存在…

java学习day56(Spring Boot)Spring Boot

主要内容: 1.Spring Boot基本应用 2.Spring Boot原理深入及源码剖析 3.Spring Boot数据访问 4.Spring Boot视图技术 5.Spring Boot实战演练 6.Spring Boot项目部署 1. SpringBoot基本应用 1.1 约定优于配置Build Anything with Spring Boot:Spring Boot …

【数据结构】堆的实现及排序

目录一、树的相关概念及其特殊二叉树1、数的相关概念2、特殊二叉树二、堆1、堆的实现1.1、堆向下调整算法和向上调整算法的时间复杂度1.2、堆的构建1.3、堆的插入1.4、堆的删除1.5、取堆顶的数据、堆的个数及堆的判空2、堆的排序一、树的相关概念及其特殊二叉树 讲堆之前&#…

透视虎牙斗鱼三季报:游戏直播在各自“求变”中见分晓

游戏直播行业,依然硝烟弥漫。 经历千播大战、熊猫出局的洗礼后,虎牙和斗鱼双方缠斗升级,另有B站和抖音、快手等视频平台来势汹汹,抢夺仅有的市场蛋糕。 而在游戏行业遇冷、政策趋严等因素多重考验下,这场争夺战无疑将…

fsync

由于目前操作系统都具有延迟写(delayed write)功能, fwrite/write并不会直接把数据写到磁盘上, 而是在buffer满时才开始写入到磁盘。 要想把数据写到磁盘上,需要调用fsync函数 open(fd) write(fd) fsync(fd) close(fd) 或者 fopen(fp…

金仓数据库KingbaseES查询计划剖析

目录 1、KingbaseES数据库中的查询生命周期 2、数据设置 3、KingbaseES解释一个查询 4、什么是数据库中的缓冲区和缓存? 5、VERBOSE 命令参数 6、KingbaseES中的 FORMAT 解释 7、总结EXPLAIN使用方式 8、执行计划查看 了解KingbaseES查询计划对于开发人员和…

HarmonyOS应用API手势方法-绑定手势方法

述:为组件绑定不同类型的手势事件,并设置事件的响应方法。 Api:从API Version 7开始支持 一、绑定手势识别: 通过如下属性给组件绑定手势识别,手势识别成功后可以通过事件回调通知组件。 名称参数类型默认值描述ge…

银河麒麟V10+达梦数据库8保姆级安装教程

银河麒麟V10达梦数据库8保姆级安装教程 一、系统和数据库的下载 银河麒麟V10版本: 首页 → 桌面操作系统 → 银河麒麟桌面操作系统V10 → 试用(填写信息) → 点击地址进行下载(X86centos7) #如果不想进行上面的操作,…

Casbin——Java版本(笔记)

文章目录一、Casbin 是什么?二、快速开始2.1 载入配置2.2 如何判断权限2.3 model.conf2.3.1 基本格式2.3.2 SpringBoot下的使用2.3.3 匹配的函数内置函数自定义函数2.3.4 基于角色的访问控制角色的层次区分用户和角色隐式角色权限域内RBAC角色与函数2.3.5 优先级模型…

react事件系统(老版本)

带着问题阅读探索 React 为什么有自己的事件系统?什么是事件合成 ?如何实现的批量更新?事件系统如何模拟冒泡和捕获阶段?如何通过 dom 元素找到与之匹配的fiber?为什么不能用 return false 来阻止事件的默认行为&…

python【PyQt5】的环境搭建和使用(全网最全)其一

什么是pyQT pyqt是一个用于创建GUI应用程序的跨平台工具包,它将python与qt库融为一体。也就是说,pyqt允许使用python语言调用qt库中的API。这样做的最大好处就是在保存了qt高运行效率的同时,大大提高开发效率。因为,使用python语言…