Самая первая DAG, с которой вы (как разработчик Spark) столкнетесь, — это когда вы применяете преобразования к своему набору данных как RDD.
После создания RDD (загрузив набор данных из внешнего хранилища или создав его из локальной коллекции) вы начинаете с одноузловой линии RDD.
val nums = sc.parallelize(0 to 9)
scala> nums.toDebugString
res0: String = (8) ParallelCollectionRDD[1] at parallelize at <console>:24 []
Сразу после преобразования, такого как map
, вы создаете еще один RDD, исходный из которого является его родителем.
val even = nums.map(_ * 2)
scala> even.toDebugString
res1: String =
(8) MapPartitionsRDD[2] at map at <console>:26 []
| ParallelCollectionRDD[1] at parallelize at <console>:24 []
И так далее. Преобразуя СДР с помощью операторов преобразования, вы строите граф преобразований, который представляет собой родословную СДР, которая представляет собой просто направленный ациклический граф зависимостей СДР.
Другой DAG, о котором вам могут рассказать, — это когда вы выполняете действие на RDD, которое приведет к заданию Spark. Это задание Spark в RDD в конечном итоге будет сопоставлено с набором этапов (по DAGScheduler
), которые снова создадут граф этапов, являющийся ориентированным ациклическим графом этапов.
В Spark нет других DAG.
Я не могу комментировать Hadoop.
person
Jacek Laskowski
schedule
22.06.2017