Spark中的有向无环图(DAG:Directed Acyclic Graph)_spark有向无环图-程序员宅基地

技术标签: spark  数据计算与分析组件  大数据  

目录

DAG是什么

RDD间存在什么样的依赖关系

DAG的State是什么


 

DAG是什么

如果一个有向图无法从任意顶点出发经过若干条边回到该点,则这个图是一个有向无环图(DAG图)。Spark的计算过程,很多时候都有先后顺序,受制于某些任务必须比另一些任务较早执行的限制,必须对任务进行排队,形成一个队列的任务集合,这个队列的任务集合就是DAG图。每一个定点就是一个任务,每一条边代表一种限制约束(Spark中的依赖关系)。

Spark中DAG生成过程的重点是对Stage的划分,Stage的划分依赖RDD宽窄依赖,当Driver程序提交后,Spark调度器将所有的RDD看成是一个Stage,然后对此Stage进行从后往前的回溯,遇到Shuffle就断开,形成一个新的State,遇到窄依赖,则归并到同一个Stage。等到所有的步骤回溯完成,便生成一个DAG图

RDD间存在什么样的依赖关系

RDD之间的依赖关系分为窄依赖和宽依赖

窄依赖:父分区和子分区存在一对一的关系,比如:map 、filter、union函数。不会引入Shuffle的概念,不会发生磁盘IO读写。DAG连续多个窄依赖,会放到到同一台机器的内存中完成。

宽依赖:父分区和子分区存在多对多的关系,比如groupBy、sortByKey等带分组功能的一些懒加载函数。引入了Shuffle的概念,会发生磁盘IO读写。宽依赖数据丢失时,可以从Shuffle临时文件恢复数据

DAG的State是什么

Spark执行JOB任务(一个Action操作对应一个JOB任务),根据依赖关系,将DAG划分为不同的阶段。下面是划分流程

  1.  Spark在执行Transformation类型操作时,都不会立即执行,而是懒计算
  2.  执行若干步Transformation类型操作后,一旦遇到Action操作,才会真正触发计算
  3.  划分时,从当前Action往前回溯,如果遇到的是窄依赖则应用流水线优化(即连续的多个窄依赖会放到一起执行),继续往前找,直到遇到一个宽依赖
  4.  宽依赖要进行Shuffle,不执行流水线优化,所以将这一阶段执行过程组装为一个State
  5.  再从当前宽依赖开始向前找,重复刚才的步骤,从而将整个DAG划分为若干State

Task:对应宽依赖中的一个分区,或者窄依赖中的一个平行流水线。一个Task由一个线程运行。流水线内的多个平行分区可以并行执行

上图存在RDD1->RDD3的两个Task(流水线优化成了2个Task)和RDD4的两个Task,总共4个Task

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_37536020/article/details/106815387

智能推荐

SpringBoot实现注册操作_springboot不同身份注册-程序员宅基地

文章浏览阅读2.1k次,点赞3次,收藏10次。这段时间开始做后台接口的测试都是在自己电脑上做的一些简单的界面来测试自己写的接口有没有出现什么问题。_springboot不同身份注册

oracle em-application.log 占用空间_oracle中em-application.log-程序员宅基地

文章浏览阅读2.3k次。运行一段时间后,发现磁盘空间剧减,除了数据占用空间外,日志文件也占用空间.如下两个文件占用空间较大home/oracle/rda/outpu/*.loghome/oracle/product/10.2.0/db/oc4j/j2ee/OC4J_DBConsole_gxdb1_gxdb1/log/http-web-access.loghttp-web-access.log_oracle中em-application.log

mini2440 简单按键中断模式驱动程序_make -c $(kern_dir) m=`pwd` modules clean-程序员宅基地

文章浏览阅读853次。MakefileKERN_DIR = /home/grh/kernel_source_code/linux-2.6.32.2all : make -C $(KERN_DIR) M=`pwd` modules arm-linux-gcc key_interrupt_app.c -o key_interrupt_appclean : make -C $(KERN_DIR) M=`pwd_make -c $(kern_dir) m=`pwd` modules clean

subprocess.Popen BrokenPipeError: [Errno 32] Broken pipe-程序员宅基地

文章浏览阅读5.1k次,点赞3次,收藏9次。BrokenPipeError: [Errno 32] Broken pipe在向管道中写入参数的时候,一段时间正常写入数据后,若长时间未写入数据,则会报错BrokenPipeError: [Errno 32] Broken pipe,且该进程会进入睡眠原代码 # 定义管道及ffmpeg命令,输出rtmp流的时候使用command = ['ffmpeg', '-y', '-v', '24', # 日志显示等级 '-f', 'rawv_brokenpipeerror: [errno 32] broken pipe

身价1亿日元的“机器人观音”问世,为普罗大众讲解佛义 ...-程序员宅基地

文章浏览阅读81次。只有人们想不到的,没有机器人做不到的。 日前,日本高台寺展示了智能机器人观音“Minder”,旨在向现代人简单易懂的阐明佛教的教义。 据了解,“Minder”由大阪大学教授石黑浩等人协助研发,研发费用为1亿日元(约600万人民币)。外形方面,“Minder”高约195厘米、重约60公斤,头部、手臂和躯体可以转动,左眼内装有摄像头。 研究..._养猪起家身价1296亿

pandas获得指定行_pandas取dataframe特定行/列_pandas选取特定值所在的行-程序员宅基地

文章浏览阅读1.6w次,点赞13次,收藏96次。转自他人博客:https://blog.csdn.net/weixin_39586825/article/details/1117585061.按列取、按索引/行取、按特定行列取import numpy as npfrom pandas import DataFrameimport pandas as pddf=DataFrame(np.arange(12).reshape((3,4)),index=[‘one’,‘two’,‘thr’],columns=list(‘abcd’))df[‘a’]_pandas选取特定值所在的行

随便推点

php 判断post编码格式,php如何判断get或post的值是否存在-程序员宅基地

文章浏览阅读717次。php如何判断get或post的值是否存在,这个问题困扰了我很长时间,是用isset还是empty还是is_array啥的,请大神给一个指点回复内容:php如何判断get或post的值是否存在,这个问题困扰了我很长时间,是用isset还是empty还是is_array啥的,请大神给一个指点isset()是判断这个变量是否定义,empty()是在这个变量已经定义的情况下(如果变量没定义,将报错var..._isset empty $_get

计算机系统课程 笔记总结 CSAPP第七章 链接(7.1-7.13)_csapp 7.6.1-程序员宅基地

文章浏览阅读2.6k次,点赞16次,收藏45次。GitHub计算机系统CSAPP课程资源 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.1-2.2) 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.3-2.4) 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.2-3.4) 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.5-3.7) 计算机系统课程 笔记总结 ..._csapp 7.6.1

Redis总结-程序员宅基地

文章浏览阅读248次。目录概述Redis是什么?简述它的优缺点?为什么要使用Redis/缓存Redis为什么这么快?Redis相比Memcached有哪些优势?Redis的常用场景有哪些?数据类型Redis的数据类型有哪些?线程模型Redis为何选择单线程?Redis真的是单线程?Redisv6.0为何引入多线程?过期键的删除策略Redis过期键的删除策略?过期键的删除策略都有哪些?内存相关MySQL里有2000w数据,redis中只能存20w的数据,如何保证redis中的数据都是热点数据?Redis内存淘汰机制?Redis如何

nginx平滑重启和升级-程序员宅基地

文章浏览阅读77次。平滑重启 kill -HUP `cat /usr/local/www/nginx/logs/nginx.pid`平滑升级nginxcd /yujialinwget http://nginx.org/download/nginx-1.0.6.tar.gztar zxvf nginx-1.0.6.tar.gzcd nginx-1.0.6/usr/local/www/nginx/sbin/nginx -..._php 平滑升级

什么是ip6-程序员宅基地

文章浏览阅读3.9k次。相比于IPv4来说,IPv6的地址更加充足,安全性也更高,可以解决如今IP地址枯竭的问题,为物联网时代的发展提供网络基础;Pv6具有更大的地址空间,使用更小的路由表,加入了对自动配置的支持。ipv6是什么Pv6是第六代互联网协议,被设计用于替代使用了30多年的第四代互联网协议的下一代IP协议。由于IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展,所以出现了替代版本的IP协议。..._ip6

android bluetooth stack-enable_android bluetooth stack-enable-程序员宅基地

文章浏览阅读2.5k次。android bluetooth stack_android bluetooth stack-enable

推荐文章

热门文章

相关标签