Что такое Lineage In Spark?
Как происхождение помогает пересчитать данные?
Например, у меня есть несколько узлов, вычисляющих данные по 30 минут каждый. Если произойдет сбой через 15 минут, можем ли мы пересчитать данные, обработанные через 15 минут, снова, используя родословную, не давая снова 15 минут?
5 ответов
Все, что нужно понять о происхождении, находится в определении RDD
,
Итак, давайте рассмотрим это:
СДР представляют собой неизменяемый распределенный набор элементов ваших данных, которые могут храниться в памяти или на диске в кластере машин. Данные распределяются по компьютерам в вашем кластере, которые могут работать параллельно с низкоуровневым API, который предлагает преобразования и действия. СДР являются отказоустойчивыми, так как они отслеживают информацию о происхождении данных для автоматического восстановления потерянных данных при сбое
Таким образом, есть в основном две вещи, чтобы понять:
К сожалению, эти темы довольно долго обсуждаются в одном ответе. Я рекомендую вам потратить некоторое время на их чтение вместе со следующей статьей о Data Lineage.
А теперь ответим на ваш вопрос и сомнения
Если исполнителю не удастся вычислить ваши данные, через 15 минут он вернется к вашей последней контрольной точке, будь то из источника или из кэша в памяти и / или на диске.
Таким образом, это не спасет вас от тех 15 минут, которые вы упомянули!
Когда вызывается преобразование (карта, фильтр и т. Д.), Оно не выполняется Spark немедленно, вместо этого создается линия для каждого преобразования. Родословная будет отслеживать, какие все преобразования должны быть применены к этому СДР, включая местоположение, откуда оно должно читать данные.
Например, рассмотрим следующий пример
val myRdd = sc.textFile("spam.txt")
val filteredRdd = myRdd.filter(line => line.contains("wonder"))
filteredRdd.count()
sc.textFile() и myRdd.filter() не выполняются немедленно, они будут выполняться только при вызове Action на RDD - здесь FilterRdd.count().
Действие используется для сохранения результата в каком-либо месте или для его отображения. Информация о происхождении СДР также может быть напечатана с помощью команды FilterRdd.toDebugString(здесь указано СДР). Кроме того, DAG Visualization показывает полный график очень интуитивно понятным образом:
DEF: граф происхождения Spark представляет собой набор зависимостей между RDD• Графики происхождения ведутся для каждого приложения Spark отдельно • Граф происхождения используется для перекомпьютера RDD по запросу и для восстановления потерянных данных, если части сохраняемого RDD потеряны • Примечание. : будьте осторожны и не путайте граф происхождения с Действия вызывают оценку всех (восходящих) преобразований в графе происхождения СДР, на котором они вызываются.
В Spark Lineage Graph - это граф зависимостей между существующим RDD и новым RDD. Это означает, что все зависимости между RDD будут записаны на графике, а не в исходных данных.
Источник: Что такое Lineage Graph
В заключение отметим, что Lineage Graph — это ключевая концепция Apache Spark, которая представляет зависимости между RDD или DataFrame в приложении Spark. Lineage Graph помогает обеспечить отказоустойчивость, восстанавливая потерянные RDD на основе их родительских RDD и их преобразований.