Подтвердить что ты не робот

Что такое RDD в искре

Определение говорит:

RDD - неизменяемый распределенный набор объектов

Я не совсем понимаю, что это значит. Это как данные (секционированные объекты), хранящиеся на жестком диске. Если да, то почему RDD может иметь пользовательские классы (такие как java, scala или python)

Из этой ссылки: https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch03.html В ней упоминается:

Пользователи создают RDD двумя способами: путем загрузки внешнего набора данных или путем распространение набора объектов (например, списка или набора) в их программа драйвера

Я действительно путаю понимание RDD в целом и относительно искры и хаоса.

Может кто-нибудь помочь.

4b9b3361

Ответ 1

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

Формальное определение:

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

Если вы хотите получить полную информацию о том, что такое СДР, прочитайте одну из основных научных статей Spark: Устойчивые распределенные наборы данных: отказоустойчивая абстракция для кластерных вычислений в памяти

Ответ 2

СДР является логической ссылкой на dataset, который разделен на множество серверных машин в кластере. СДР являются неизменными и самостоятельно восстанавливаются в случае сбоя.

dataset может быть данными, загруженными пользователем извне. Это может быть файл JSON, CSV файл или текстовый файл без определенной структуры данных.

enter image description here

ОБНОВЛЕНИЕ: Здесь приведена статья, описывающая внутренности RDD:

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

Ответ 3

Формально RDD представляет собой разделяемый набор записей только для чтения. RDD можно создавать только посредством детерминированных операций с данными (1) в стабильном хранилище или (2) другими RDD.

RDD имеют следующие свойства:

  • Неизменность и разбиение:  RDD, состоящие из набора разделяемых записей. Раздел является базовой единицей parallelism в RDD, и каждый раздел представляет собой одно логическое разделение данных, которое является неизменным и создается посредством некоторых преобразований на существующих разделах. Возможность использования помогает добиться согласованности вычислений.

    Пользователи могут определять свои собственные критерии для разбиения на разделы на основе ключей, по которым они хотят объединить несколько наборов данных, если это необходимо.

  • Крупнозернистые операции: Крупнозернистые операции - это операции, которые применяются ко всем элементам наборов данных. Например, это карта или фильтр или операция groupBy, которая будет выполняться для всех элементов в разделе RDD.

  • Отказоустойчивость:  Поскольку RDD создаются по множеству преобразований, он регистрирует эти преобразования, а не фактические данные. График этих преобразований для создания одного RDD называется графиком Lineage.

Например -

firstRDD=sc.textFile("hdfs://...")

secondRDD=firstRDD.filter(someFunction);

thirdRDD = secondRDD.map(someFunction);

result = thirdRDD.count()

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

  1. ленивые оценки: Spark вычисляет RDD лениво при первом использовании в действии, чтобы он мог преобразовывать конвейеры. Таким образом, в приведенном выше примере RDD будет оцениваться только при вызове действия count().

  2. Постоянство: Пользователи могут указывать, какие RDD они будут повторно использовать, и выбрать для них стратегию хранения (например, в памяти или на диске и т.д.).

Эти свойства RDD делают их полезными для быстрых вычислений.

Ответ 4

Resilient Distributed Dataset (RDD) - это способ, которым Spark представляет данные. Данные могут поступать из разных источников:

  • Текстовый файл
  • Файл CSV
  • Файл JSON
  • База данных (через драйвер JBDC)

RDD по отношению к Spark

Spark - это просто реализация RDD.

RDD по отношению к Hadoop

Сила Hadoop заключается в том, что она позволяет пользователям писать параллельные вычисления, не беспокоясь о распределении работы и отказоустойчивости. Однако Hadoop неэффективен для приложений, которые повторно используют промежуточные результаты. Например, итеративные алгоритмы машинного обучения, такие как PageRank, K-означает кластеризацию и логистическую регрессию, повторно используют промежуточные результаты.

RDD позволяет хранить промежуточные результаты внутри ОЗУ. Hadoop пришлось бы записать его во внешнюю стабильную систему хранения, которая генерирует диск ввода-вывода и сериализации. С RDD Spark до 20 раз быстрее, чем Hadoop для итеративных приложений.

Дальнейшие сведения об использовании Spark

Крупнозернистые преобразования

Преобразования, применяемые к RDD, являются крупнозернистыми. Это означает, что операции с RDD применяются ко всему набору данных, а не к отдельным элементам. Поэтому разрешены операции, такие как map, filter, group, reduce, но такие операции, как set (i) и get (i), отсутствуют.

Обратный крупнозернистый мелкозернистый. Мелкозернистая система хранения будет представлять собой базу данных.

Отказоустойчивость

RDD являются отказоустойчивыми, что является свойством, позволяющим системе продолжать работать должным образом в случае отказа одного из его компонентов.

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

Хранение данных

RDD "распределяется" (разделяется) в разделах. Каждый раздел может присутствовать в памяти или на диске машины. Когда Spark хочет запустить задачу на разделе, он отправляет ее на машину, содержащую раздел. Это известно как "локально осведомленное планирование".

Источники: Большие научные статьи об Искры: http://spark.apache.org/research.html

Включите статью, предложенную Эваном Лейтом.

Ответ 5

СДР = эластичный распределенный набор данных

Эластичный (в значении словаря) = (вещества или объекта), способный откатываться или возвращаться в форму после изгиба, растяжения или сжатия

СДР определяется как (из LearningSpark - OREILLY): способность всегда пересчитывать СДР фактически является причиной того, что СДР называются "устойчивыми". При сбое компьютера, содержащего данные RDD, Spark использует эту возможность для пересчета отсутствующих разделов, прозрачных для пользователя.

Это означает, что "данные" всегда доступны. Кроме того, Spark может работать без Hadoop и, следовательно, данные НЕ реплицируются. Одной из лучших характеристик Hadoop2.0 является "Высокая доступность" с помощью пассивного резервного режима Namenode. То же самое достигается с помощью RDD в Spark.

Данный RDD (Данные) может охватывать различные узлы в кластере Spark (как в кластере на основе Hadoop).

В случае сбоя какого-либо узла Spark может повторно вычислить СДР и загрузить данные в какой-то другой узел, и данные всегда доступны. Spark вращается вокруг концепции отказоустойчивого распределенного набора данных (RDD), который представляет собой отказоустойчивый набор элементов, с которыми можно работать параллельно (http://spark.apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds)

Ответ 6

Для сравнения RDD с коллекцией scala ниже представлены несколько различий

  • То же, но работает в кластере
  • Ленивый в природе, где scala коллекции строгие
  • RDD всегда неизменен, т.е. вы не можете изменить состояние данных в коллекции
  • RDD самовосстанавливается, то есть отказоустойчив

Ответ 7

RDD (R esilient D присваивается D atasets) - это абстракция для представления данных. Формально они представляют собой разделенную коллекцию записей только для чтения, которая предоставляет удобный API.

RDD предоставляют эффективное решение для обработки больших наборов данных в инфраструктурах кластерных вычислений, таких как MapReduce, путем решения некоторых ключевых проблем:

  • данные хранятся в памяти для уменьшения дискового ввода-вывода; это особенно актуально для итеративных вычислений - нет необходимости сохранять промежуточные данные на диск
  • Отказоустойчивость (устойчивость) достигается не путем репликации данных, а путем отслеживания всех преобразований, примененных к исходному набору данных (происхождению). Таким образом, в случае сбоя потерянные данные всегда можно пересчитать по их происхождению, а повторная репликация данных снова снижает затраты на хранение
  • ленивая оценка, то есть вычисления выполняются первыми, когда они нужны

СДР имеют два основных ограничения:

  • они неизменны (только для чтения)
  • они допускают только грубые преобразования (то есть операции, которые применяются ко всему набору данных)

Одним из важных концептуальных преимуществ RDD является то, что они объединяют данные и код, облегчая повторное использование конвейеров данных.

Источники: Устойчивые распределенные наборы данных: отказоустойчивая абстракция для кластерных вычислений в памяти, Архитектура для быстрой и общей обработки данных на крупных кластерах

Ответ 8

RDD - это способ представления данных в spark. Источником данных может быть JSON, CSV-текстовый файл или другой источник. СДР является отказоустойчивым, что означает, что он хранит данные в нескольких местах (т.е. данные хранятся в распределенной форме), поэтому в случае сбоя узла данные могут быть восстановлены. В RDD данные доступны в любое время. Однако СДР являются медленными и трудными для кодирования, следовательно, устарели. Он был заменен концепцией DataFrame и Dataset.