`

Spark 什么是DAG(有向无环图)(窄依赖和宽依赖)

 
阅读更多
在Spark里每一个操作生成一个RDD,RDD之间连一条边,最后这些RDD和他们之间的边组成一个有向无环图,这个就是DAG。

在spark的应用
Spark内核会在需要计算发生的时刻绘制一张关于计算路径的有向无环图,也就是DAG。
有了计算的DAG图,Spark内核下一步的任务就是根据DAG图将计算划分成任务集,也就是Stage,这样可以将任务提交到计算节点进行真正的计算。Spark计算的中间结果默认是保存在内存中的,Spark在划分Stage的时候会充分考虑在分布式计算中可流水线计算(pipeline)的部分来提高计算的效率,而在这个过程中,主要的根据就是RDD的依赖类型。根据不同的transformation操作,RDD的依赖可以分为窄依赖(Narrow Dependency)和宽依赖(Wide Dependency,在代码中为ShuffleDependency)两种类型。

窄依赖指的是生成的RDD中每个partition只依赖于父RDD(s) 固定的partition。
宽依赖指的是生成的RDD的每一个partition都依赖于父 RDD(s) 所有partition。

窄依赖典型的操作有map, filter, union等
宽依赖典型的操作有groupByKey, sortByKey等。

可以看到,宽依赖往往意味着shuffle操作,这也是Spark划分stage的主要边界。对于窄依赖,Spark会将其尽量划分在同一个stage中,因为它们可以进行流水线计算。
至于以上一些shuffer过程建议大家多看看spark官网会比较好点

转自:http://blog.csdn.net/sinat_31726559/article/details/51738155



分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Spark基础知识04——窄依赖、宽依赖、DAG、缓存

    RDD和它依赖的父RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency)。 窄依赖: 窄依赖指的是每一个父RDD的Partition最多被子RDD的一个Partition使用 总结:窄依赖我们...

    Spark-内核源码解析.docx

    DAGScheduler 是有向无环图调度器,负责将作业拆分成不同阶段的具有依赖关系的多批任务。在 SparkContext 初始化的过程中被实例化,一个 SparkContext 对应创建一个 DAGScheduler。DAGScheduler 完成以下工作:划分 ...

    大数据spark交流SPARK 技术交流

    在Spark中,DAG(有向无环图)用于描述任务的执行流程。transformations产生的新RDD并不会立即计算,而是等到遇到actions时才会启动计算。依赖关系分为窄依赖和宽依赖,窄依赖保证了更好的并行性,而宽依赖可能需要...

    图论- 环与块- DAG 图判定.rar

    在图论中,环与块是两个基本概念,尤其在有向无环图(DAG,Directed Acyclic Graph)的分析中,它们扮演着关键角色。 **环与图论** 环在图论中指的是一个起点和终点相同的路径,它构成了一个闭合序列。在无向图中,...

    Spark实战.docx

    此外,Spark采用了有向无环图(DAG)的任务调度机制,优化了执行计划,使得任务执行更加高效。 Spark是伯利克分析栈(BDAS)的一部分,与Hadoop生态系统中的MapReduce、HDFS、HBase、Hive等组件相辅相成。BDAS还...

    spark新手上路之源码解析.pdf

    转换操作构建了一个有向无环图 (DAG),该图表示了计算任务的执行顺序。Spark 使用这个 DAG 来计划和调度工作。 5. **计算函数与优先位置** 用户自定义的函数可以应用于 RDD 上,这些函数在执行时会考虑数据的...

    五分钟学大数据-Spark 面试八股文1

    DAG(有向无环图)与 Stage: DAG 是 Spark 作业的逻辑表示,由一系列操作(Stage)组成。Stage 是 Spark 任务的物理执行单位,划分的依据是宽依赖和窄依赖。宽依赖涉及到数据的 shuffle,导致跨节点的数据传输;窄...

    Spark源码分析2-Driver generate jobs and launch task

    当用户提交一个Spark程序时,Spark Driver会解析这个程序,将一系列的RDD操作转化为DAG(有向无环图),每个DAG就代表一个Job。Job会被进一步分解为Stage,Stage是任务调度的基本单位,通常一个Stage包含一组相互...

    spark-3.1.2.tgz & spark-3.1.2-bin-hadoop2.7.tgz.rar

    - DAG(有向无环图):Spark作业的执行计划表示,任务会被分解为一系列DAG阶段。 2. Spark的主要组件: - Spark Core:Spark的基础模块,提供并行计算的基本功能,包括调度、内存管理、故障恢复等。 - Spark SQL...

    spark源码阅读笔记

    依赖分为窄依赖和宽依赖:窄依赖是指一个RDD的分区只依赖于另一个RDD的少数分区,这允许任务并行化;宽依赖则是指一个RDD的分区依赖于所有或大量其他RDD的分区,这通常会导致数据shuffle,是计算的瓶颈。 Spark的...

    《Spark编程基础及项目实践》课后习题及答案3.pdf

    - Driver Program:是应用程序的主要控制进程,它负责构建DAG(有向无环图),并调度任务到集群上的Executor。 - ClusterManager:是资源管理器,例如YARN或Mesos,负责分配集群资源给Driver和Executor。 - ...

    工信部spark初级考试参考题目

    API、配置文件、日志输出控制、有向无环图、计算逻辑、Spark 应用程序配置、Spark 集群节点配置、RDD 算子类型、广播变量、累加器、全局共享变量、宽依赖和窄依赖、DataFrames 数据处理等。 1. Spark 的四大组件:...

    Spark官方文档中文翻译

    Spark基于DAG(有向无环图)执行模型,它将计算任务分解为一系列可重用的任务单元,这些任务单元可以在集群中的多台机器上并行执行。它的主要组件包括:Spark Core、Spark SQL、Spark Streaming、MLlib(机器学习库...

    spark全套视频教程

    我们将深入理解RDD的创建、转换和行动操作,以及优化策略如宽依赖和窄依赖。 5. **Spark Streaming**:讲解如何使用Spark Streaming构建实时数据处理系统,理解微批处理的概念,以及如何与其他流处理框架如Kafka...

    spark原理.docx

    DAG(Directed Acycle graph)是一个有向无环图,反应 RDD 之间的依赖关系。DAG 其实就是一个 JOB(会根据依赖关系被划分成多个 Stage)。注意:一个 Spark 程序会有 1~n 个 DAG,调用一次 Action 就会形成一个 DAG...

    spark_学习demo

    - **DAG(有向无环图)**:Spark的任务调度基于DAG,它表示了任务间的依赖关系。 - **Job、Stage、Task**:Job是用户提交的完整操作,被分解为多个Stage(基于Shuffle划分),每个Stage又包含多个并行执行的Task。...

    spark Software Components架构图及Task Scheduler架构

    Driver是应用程序的主进程,负责编译和优化任务执行计划,生成DAG(有向无环图)并将其分发给Executor。Executor是运行在工作节点上的进程,负责执行实际的任务计算,它们之间通过内存通信,减少了磁盘I/O,提高了...

    Spark技术内幕 深入解析Spark内核架构设计与实现原理

    其次,Spark的计算模型基于DAG(有向无环图)作业。用户编写的应用程序被分解为一系列的RDD转换和动作,这些转换和动作构成一个DAG,Spark的JobScheduler会将这个DAG拆分成多个Stage。Stage是基于数据依赖关系划分的...

    Spark RDD以及其特性.rar_RDD_Spark!_parallelbwz_spark_特性

    8. **优化的DAG调度**:Spark的调度器会构建DAG(有向无环图),通过优化任务调度,减少shuffle操作,提升性能。 9. **交互式编程**:Spark提供了Scala、Java、Python和R等多种API,支持交互式Shell,方便开发者...

    加米谷大数据——Spark核心技术原理透视Spark运行原理.docx

    9. **DAG (有向无环图)**:DAG表示RDD之间的依赖关系,是Spark作业的逻辑表示。DAGScheduler根据DAG划分Stage。 10. **DAGScheduler**:DAGScheduler是Spark的高级调度器,它分析DAG来确定任务的执行顺序,将作业...

Global site tag (gtag.js) - Google Analytics