Apache Spark中的有向无环图DAG
由DATAFLAIR TEAM ·更新· 2018年11月21日
1.目的
在本Apache Spark教程中,我们将了解Apache Spark中的DAG,DAG Scheduler是什么,Spark中对有向无环图的需求,如何在Spark中创建DAG以及如何帮助实现容错。我们还将学习DAG在RDD中的工作方式,以及DAG在Spark中的优势,该优势在Apache Spark和Hadoop MapReduce之间产生了差异。
(向非循环图)DAG中的Apache火花 是一组顶点和边,其中顶点代表RDDS和边缘代表上RDD施加操作。在Spark DAG中,每个边沿从序列中的较早方向到最后一个方向。在调用Action时,创建的DAG提交给DAG Scheduler,后者进一步将图形划分为任务阶段。
2. Apache Spark中的DAG是什么?
DAG 是无向环的有限直接图。顶点和边的数量有限,其中每个边从一个顶点指向另一个顶点。它包含一个顶点序列,以便每个边缘从该序列的较早方向到最后一个方向。它是MapReduce模型的严格概括。与MapReduce等其他系统相比,DAG操作可以更好地进行全局优化。在更复杂的工作中,DAG的情况变得清晰起来。
Apache Spark DAG允许用户进入阶段并在任何阶段进行详细扩展。在阶段视图中,将扩展 属于该阶段的所有RDD的详细信息。调度程序根据所应用的各种转换将Spark RDD分为多个阶段。(您可以参考此链接来学习RDD
详细的转换和操作)每个阶段都由基于RDD分区的任务组成,这些任务将并行执行相同的计算。这里的图是指导航,有向图和非循环图是指完成的方式。
3. Spark中需要有向无环图
Hadoop MapReduce 的局限性成为在Spark中引入DAG的关键点。通过MapReduce进行的计算分三个步骤:
每个MapReduce操作彼此独立,并且HADOOP不知道接下来要执行哪个Map reduce。有时,对于某些迭代而言,读取和写回两个map-reduce作业之间的即时结果无关紧要。在这种情况下,稳定存储(HDFS)中的内存或磁盘内存将被浪费。
分多个步骤进行,直到上一个作业完成为止,所有作业均从头开始阻塞。结果,复杂的计算可能需要很长时间并且数据量很小。
在Spark中时,会形成连续计算阶段的DAG(有向无环图)。通过这种方式,我们可以优化执行计划,例如最大程度地减少洗牌数据。相反,它是通过调整每个MapReduce步骤在MapReduce中手动完成的。
4. DAG在Spark中如何工作?
- 解释器是第一层,使用Scala解释器,Spark通过一些修改来解释代码。
- 在Spark控制台中输入代码时,Spark会创建一个运算符图。
- 当我们 在高层调用Spark RDD上的 动作时,Spark会将运算符图提交给DAG Scheduler。
- 在DAG Scheduler 中将操作员划分为任务阶段。阶段包含基于输入数据分区的任务。DAG调度程序将操作员管道在一起。例如,地图操作员在一个阶段中进行调度。
- 这些阶段将传递到“ 任务计划程序”。它通过集群管理器启动任务。阶段的依赖性对于任务计划程序是未知的。
- 该工人在slave上执行任务。
下图简要描述了DAG在Spark作业执行中的工作步骤。
在更高级别上,我们可以应用两种类型的RDD转换:窄转换(例如map(),filter()等)和宽转换(例如reduceByKey())。 窄转换不需要跨分区的数据混排,窄转换将分组为单个阶段,而在宽转换中,数据混排。因此,宽转换导致阶段边界。
每个RDD都维护一个指向一个或多个父级的指针,以及有关其与父级之间的关系类型的元数据。例如,如果我们在RDD上调用val b = a.map(),则RDD b 会保留对其父RDD a的引用,这就是RDD世系。
5.如何通过DAG实现容错?
RDD拆分为分区,并且每个节点在任何时间点都在分区上运行。这里,一系列Scala函数 在RDD的分区上执行。这些操作组合在一起,Spark执行引擎将它们视为DAG(有向无环图)。
当任何节点在任何操作中间崩溃时,请说O3,它取决于操作O2,而操作O2又是操作O1。该 集群管理器发现该节点是死的,并指定另一个节点继续处理。该节点将在RDD的特定分区以及它必须执行的一系列操作(O1-> O2-> O3)上进行操作。现在将没有数据丢失。
您可以参考此链接以学习Apache Spark中的容错功能。
6. DAG Optimizer在Spark中的工作
我们通过尽可能地重新排列和组合运算符来优化Apache Spark中的DAG。例如,如果我们提交一个火花作业,该作业具有map()操作,然后是filter操作。该DAG优化将重新因为如果过滤会减少的记录数进行地图操作这些运营商的订单。
7. DAG在Spark中的优势
Spark DAG有很多优点,让我们一一讨论:
- 可以使用有向无环图恢复丢失的RDD。
- Map Reduce只有两个查询地图,而reduce在DAG中有多个级别。因此,执行SQL查询时,DAG更加灵活。
- DAG有助于实现容错能力。这样我们就可以恢复丢失的数据。
- 它比Hadoop MapReduce这样的系统可以做更好的全局优化。
8.结论
Apache Spark中的DAG是MapReduce的替代方法。这是在分布式系统中使用的编程样式。在MapReduce中,我们只有两个功能(映射和归约),而DAG具有形成树结构的多个级别。因此,DAG的执行速度比MapReduce快,因为中间结果不会写入磁盘。
如果您对Apache Spark中的DAG有任何疑问,请随时与我们分享。我们很高兴为您解决问题。
也可以看看-