Что такое Lineage в Spark?

Как родословная помогает пересчитывать данные?

Например, у меня есть несколько узлов, каждый из которых обрабатывает данные по 30 минут. Если один из них выйдет из строя через 15 минут, можем ли мы снова пересчитать данные, обработанные за 15 минут, используя родословную, не давая снова 15 минут?


person Gaurav Dubey    schedule 18.08.2017    source источник
comment
Создайте rdd, сделайте в нем кучу преобразований. а затем вызовите toDebugString на RDD. Вы сможете увидеть происхождение этого конкретного rdd.   -  person philantrovert    schedule 18.08.2017


Ответы (4)


Все, что нужно понять о происхождении, находится в определении RDD.

Итак, давайте рассмотрим это:

RDD — это неизменяемая распределенная коллекция элементов ваших данных, которые могут храниться в памяти или на диске в кластере машин. Данные распределяются между машинами в вашем кластере, которые могут работать параллельно с помощью низкоуровневого API, предлагающего преобразования и действия. RDD отказоустойчивы, поскольку они отслеживают информацию о происхождении данных для автоматического восстановления потерянных данных в случае сбоя

Итак, в основном нужно понять 2 вещи:

К сожалению, эти темы довольно длинные, чтобы обсуждать их в одном ответе. Я рекомендую вам уделить некоторое время их прочтению вместе со следующей статьей о происхождении данных.

А теперь ответ на ваш вопрос и сомнения:

Если исполнителю не удастся обработать ваши данные, через 15 минут они вернутся к вашей последней контрольной точке, будь то из источника или из кэша в памяти и/или на диске.

Таким образом, те 15 минут, о которых вы упомянули, это вам не сэкономит!

person eliasah    schedule 18.08.2017

Когда вызывается преобразование (карта или фильтр и т. д.), оно не выполняется Spark немедленно, вместо этого для каждого преобразования создается родословная. Происхождение будет отслеживать все преобразования, которые должны быть применены к этому RDD, включая место, откуда он должен считывать данные.

Например, рассмотрим следующий пример

val myRdd = sc.textFile("spam.txt")
val filteredRdd = myRdd.filter(line => line.contains("wonder"))
filteredRdd.count()

sc.textFile() и myRdd.filter() не выполняются немедленно, они будут выполняться только тогда, когда действие вызывается в RDD — здесь filteredRdd.count().

Действие используется либо для сохранения результата в каком-либо месте, либо для его отображения. Информацию о происхождении RDD также можно распечатать с помощью команды filteredRdd.toDebugString (здесь filteredRdd — это RDD). Кроме того, визуализация DAG показывает полный график очень интуитивно понятным образом следующим образом: ://i.stack.imgur.com/opKD0.png" alt="введите здесь описание изображения">

person KayV    schedule 07.12.2017

В Spark Lineage Graph — это граф зависимостей между существующим RDD и новым RDD. Это означает, что все зависимости между СДР будут записаны в графе, а не в исходных данных.

Источник: Что такое Lineage Graph

person Spandana r    schedule 09.02.2020

DEF: граф происхождения Spark представляет собой набор зависимостей между RDD • Графики происхождения ведутся для каждого приложения Spark отдельно • Граф происхождения используется для перекомпьютера RDD по запросу и для восстановления потерянных данных, если части сохраняемого RDD потеряны • Примечание. : будьте осторожны и не путайте граф происхождения с  Действия вызывают оценку всех (восходящих) преобразований в графе происхождения СДР, на котором они вызываются.

person Fury Fazu    schedule 24.01.2021