Как реализован направленный ациклический граф в Hadoop или Spark?

Я продолжаю получать термин DAG в разных контекстах в экосистеме Hadoop, например

когда какое-либо действие вызывается в RDD, Spark создает DAG и отправляет его планировщику DAG.

or

Модель DAG является строгим обобщением модели MapReduce.

Как это реализовано в Hadoop или Spark?


person NeoWelkin    schedule 22.06.2017    source источник
comment
Перейдите по этой ссылке и по этой ссылке. Это должно ответить на большинство ваших вопросов. Кроме того, DAG относится к Spark. Выполнение DAG отличается от MapReduce.   -  person philantrovert    schedule 22.06.2017


Ответы (2)


Самая первая 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

введите здесь описание изображения

Искра

lines = spark.textfile("hdfs://<file_path>",2).

Здесь строки rdd имеют 2 раздела. На приведенной выше диаграмме скажем, что A, B, C и D являются такими rdds, каждый из которых имеет 2 раздела (красные прямоугольники). Как и на диаграмме, каждый rdd является результатом преобразования. В основном зависимости между rdds классифицируются как узкие и широкие зависимости. Узкие зависимости образуются, когда каждый раздел родительского rdd используется только одним разделом дочернего rdd, а перетасовка данных приводит к широким зависимостям.

Все узкие зависимости образуют этап 1, а широкие зависимости — этап 2.

Такие этапы образуют ориентированный ациклический граф

И эти этапы затем отправляются в планировщик задач.

Надеюсь это поможет.

person dexter    schedule 22.06.2017