Что такое РДД в Искре


Определение гласит:

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

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

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

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

Меня действительно смущает понимание RDD в целом и по отношению к spark и hadoop.

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

8 27

8 ответов:

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

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

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

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

RDD - это логическая ссылка на dataset, которая разбита на множество серверных машин в кластере. RDD S являются неизменяемыми и самостоятельно восстанавливаются в случае сбоя.

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

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

Обновление: здесь статья, описывающая внутренние устройства RDD:

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

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

RDDs обладают следующими свойствами -

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

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

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

  3. Отказоустойчивость: Поскольку RDDs создаются на основе набора преобразований, он регистрирует эти преобразования, а не фактические данные.График этих преобразований, чтобы произвести один РДД называется графической линии.

Например -

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

secondRDD=firstRDD.filter(someFunction);

thirdRDD = secondRDD.map(someFunction);

result = thirdRDD.count()

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

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

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

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

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

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

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

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

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

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

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

Дальнейшие реализации Подробнее о Spark

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

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

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

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

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

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

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

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

Источники : Отличные научные статьи о Spark : http://spark.apache.org/research.html

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

RDD = устойчивый распределенный набор данных

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

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

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

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

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

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

  1. то же самое, но работает на кластере
  2. ленивый в природе, где коллекции scala строги
  3. RDD всегда неизменен, т. е. вы не можете изменить состояние данных в коллекции
  4. RDD самовосстанавливаются, то есть отказоустойчивы

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

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

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

У RDD есть два основные ограничения:

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

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

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