DAG如何在RDD中工作?
Spark研究论文已经在经典的Hadoop MapReduce上规定了一种新的分布式编程模型,声称在许多情况下,特别是在机器学习上,这种简化和巨大的性能提升。 然而,在本文中,用有向无环图揭示Resilient Distributed Datasets
internal mechanics
的材料似乎是缺乏的。
通过调查源代码是否应该更好地学习?
即使我一直在networking上查看火花是如何从RDD计算DAG并随后执行任务的。
在高层次上,当RDD调用任何操作时,Spark会创buildDAG并将其提交给DAG调度程序。
-
DAG调度程序将操作员分成多个任务阶段。 一个阶段由基于input数据分区的任务组成。 DAG调度程序一起pipe理运营商。 例如,许多地图运营商可以安排在一个阶段。 DAG调度程序的最终结果是一系列阶段。
-
阶段传递到任务计划程序。任务计划程序通过集群pipe理器(Spark Standalone / Yarn / Mesos)启动任务。 任务调度程序不知道阶段的依赖关系。
-
工人在奴隶上执行任务。
让我们来看看Spark如何构buildDAG。
在高层次上,可以对RDD进行两种转型,即窄转型,宽转型 。 广泛的转变基本上导致了阶段的界限。
缩小转换 – 不需要在分区之间进行数据混洗。 例如,地图,filter等。
广泛的转换 – 要求数据被洗牌,例如reduceByKey等。
我们举一个例子来计算在每个严重级别出现多less条日志消息,
以下是以严重性级别开始的日志文件,
INFO I'm Info message WARN I'm a Warn message INFO I'm another Info message
并创build下面的scala代码来提取相同的,
val input = sc.textFile("log.txt") val splitedLines = input.map(line => line.split(" ")) .map(words => (words(0), 1)) .reduceByKey{(a,b) => a + b}
这个命令序列隐含地定义了一个RDD对象的DAG(RDD谱系),稍后将在一个动作被调用时使用。 每个RDD都保存一个指向一个或多个父母的指针,以及与元数据关于它与父系关系的types的元数据。 例如,当我们在RDD上调用val b = a.map()
时,RDD b
保持对其父a
的引用,这是一个谱系。
为了显示RDD的血统,Spark提供了一个debugging方法toDebugString()
。 例如在splitedLines
RDD上执行toDebugString()
将输出如下内容:
(2) ShuffledRDD[6] at reduceByKey at <console>:25 [] +-(2) MapPartitionsRDD[5] at map at <console>:24 [] | MapPartitionsRDD[4] at map at <console>:23 [] | log.txt MapPartitionsRDD[1] at textFile at <console>:21 [] | log.txt HadoopRDD[0] at textFile at <console>:21 []
第一行(从底部)显示inputRDD。 我们通过调用sc.textFile()
创build这个RDD。 下面是从给定的RDD创build的DAGgraphics的更多图解视图。
一旦DAG被构build,Spark调度器将创build一个物理执行计划。 如上所述,DAG调度程序将graphics分成多个阶段,根据转换创build阶段。 狭隘的转变将被分组(pipe线)成一个单一的阶段。 所以对于我们的例子,Spark将创build两个阶段执行,如下所示:
DAG调度程序然后将这些阶段提交到任务调度程序。 提交的任务数量取决于textFile中存在的分区数量。 Fox示例考虑在这个例子中我们有4个分区,那么如果有足够的从/内核,将会有4个并行创build和提交的任务。 下图更详细地说明了这一点:
有关更详细的信息,build议您浏览Spark创作者深入了解DAG和执行计划和生命周期的以下YouTubevideo。
- 高级Apache Spark – Sameer Farooqui(Databricks)
- 对Spark内部的深入理解–Aaron Davidson(Databricks)
- AmpLab Spark内部简介
开始Spark 1.4
通过以下三个组件添加了数据可视化,其中还提供了DAG
的清晰graphics表示。
-
Spark事件的时间轴视图
-
执行DAG
-
Spark Streaming统计的可视化
请参阅链接了解更多信息。