web-dev-qa-db-fra.com

Qu'est-ce que RDD dans spark

La définition dit: 

RDD est une collection immuable d'objets distribués 

Je ne comprends pas bien ce que cela signifie. Est-ce comme les données (objets partitionnés) stockées sur le disque dur? Si oui, alors pourquoi les RDD peuvent avoir des classes définies par l'utilisateur (comme Java, scala ou python)

A partir de ce lien: https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch03.html Il mentionne:

Les utilisateurs créent des RDD de deux manières: en chargeant un jeu de données externe ou par distribuer une collection d'objets (une liste ou un ensemble, par exemple) dans leur fichier programme de conduite

Je suis vraiment confus de comprendre RDD en général et par rapport à spark et hadoop.

Puis-je avoir une aide s'il vous plait.

32
kittu

Un RDD est essentiellement la représentation Spark d'un ensemble de données, réparties sur plusieurs machines, avec des API pour vous permettre de les utiliser. Un RDD peut provenir de n’importe quelle source de données, par exemple fichiers texte, une base de données via JDBC, etc.

La définition formelle est:

Les RDD sont des structures de données parallèles tolérantes aux pannes qui permettent aux utilisateurs conserver explicitement les résultats intermédiaires en mémoire, contrôler leur partitionnement pour optimiser le placement des données et les manipuler à l'aide d'un fichier riche ensemble d'opérateurs.

Pour en savoir plus sur ce qu’est un RDD, lisez l’un des documents académiques principaux de Spark, Jeux de données distribués résilients: une abstraction à tolérance de pannes pour le calcul en cluster en mémoire

31
Ewan Leith

RDD est une référence logique d'une dataset qui est partitionnée sur de nombreux ordinateurs serveurs du cluster. RDD s sont immuables et sont récupérés d'eux-mêmes en cas d'échec.

dataset pourrait être les données chargées de manière externe par l'utilisateur. Il peut s'agir d'un fichier JSON, d'un fichier csv ou d'un fichier texte sans structure de données spécifique.

 enter image description here

UPDATE: Here est l'article qui décrit les internes de RDD: 

J'espère que cela t'aides.

13
tharindu_DG

Formellement, un RDD est une collection d'enregistrements partitionnée en lecture seule. Les RDD ne peuvent être créés que par des opérations déterministes sur (1) des données stockées de manière stable ou (2) d'autres RDD.

Les RDD ont les propriétés suivantes -

  1. Immutabilité et partitionnement: Les RDD composés d'une collection d'enregistrements partitionnés. La partition est l’unité de base du parallélisme dans un RDD, et chaque partition est une division logique des données qui est immuable et créée au moyen de certaines transformations sur des partitions existantes.

    Les utilisateurs peuvent définir leurs propres critères de partitionnement en fonction des clés sur lesquelles ils souhaitent joindre plusieurs ensembles de données, si nécessaire.

  2. Opérations à grains grossiers: Les opérations à grains grossiers sont des opérations qui s'appliquent à tous les éléments des jeux de données. Par exemple, une opération de mappage, de filtrage ou de groupBy sera effectuée sur tous les éléments d’une partition de RDD.

  3. Tolérance aux pannes: Etant donné que les RDD sont créés sur un ensemble de transformations, il enregistre ces transformations plutôt que des données réelles. Le graphe de ces transformations pour produire un RDD est appelé graphe de lignage.

Par exemple -

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

secondRDD=firstRDD.filter(someFunction);

thirdRDD = secondRDD.map(someFunction);

result = thirdRDD.count()

Si nous perdons une partition de RDD, nous pouvons rejouer la transformation de cette partition dans la lignée pour obtenir le même calcul, plutôt que de répliquer les données sur plusieurs nœuds. dans la gestion des données et la réplication et permet ainsi des calculs plus rapides.

  1. Évaluations paresseuses: Spark calcule les RDD paresseusement la première fois qu’ils sont utilisés dans une action, de manière à pouvoir acheminer les transformations en pipeline. Ainsi, dans l'exemple ci-dessus, RDD sera évalué uniquement lorsque l'action count () est invoquée.

  2. Persistance: Les utilisateurs peuvent indiquer les RDD qu’ils vont réutiliser et choisir une stratégie de stockage pour eux (par exemple, stockage en mémoire ou sur disque, etc.)

Ces propriétés des RDD les rendent utiles pour les calculs rapides.

9
Mahesh

Resilient Distributed Dataset (RDD) est la façon dont Spark représente les données. Les données peuvent provenir de différentes sources:

  • Fichier texte
  • Fichier CSV
  • Fichier JSON 
  • Base de données (via le pilote JBDC)

RDD en relation avec Spark

Spark est simplement une implémentation de RDD. 

RDD en relation avec Hadoop

La puissance de Hadoop réside dans le fait qu’il permet aux utilisateurs d’écrire des calculs parallèles sans se soucier de la répartition du travail et de la tolérance aux pannes. Cependant, Hadoop est inefficace pour les applications qui réutilisent des résultats intermédiaires. Par exemple, les algorithmes d'apprentissage automatique itératifs, tels que le PageRank, la classification K-means et la régression logistique, réutilisent les résultats intermédiaires. 

RDD permet de stocker des résultats intermédiaires dans la RAM. Hadoop devrait l'écrire sur un système de stockage externe stable, qui génère des E/S de disque et une sérialisation. Avec RDD, Spark est jusqu'à 20 fois plus rapide que Hadoop pour les applications itératives. 

Plus de détails sur les implémentations de Spark

Transformations à grains grossiers

Les transformations appliquées à un RDD sont à grain grossier. Cela signifie que les opérations sur un RDD sont appliquées à l'ensemble de données, pas à ses éléments individuels. Par conséquent, les opérations comme map, filter, group, reduction sont autorisées, mais les opérations comme set (i) et get (i) ne le sont pas. 

L'inverse de gros grain est fin. Un système de stockage à granularité fine serait une base de données. 

Tolérance de panne

Les RDD sont tolérants aux pannes, une propriété qui permet au système de continuer à fonctionner correctement en cas de défaillance de l'un de ses composants. 

La tolérance aux pannes de Spark est fortement liée à sa nature à grain grossier. Le seul moyen d'implémenter la tolérance de panne dans un système de stockage à granularité fine est de répliquer ses données ou de mettre à jour les mises à jour des journaux sur plusieurs ordinateurs. Cependant, dans un système à grain grossier tel que Spark, seules les transformations sont consignées. Si une partition d'un RDD est perdue, ce dernier dispose d'assez d'informations pour le recalculer rapidement.

Stockage de données

Le RDD est "distribué" (séparé) dans les partitions. Chaque partition peut être présente dans la mémoire ou sur le disque d'une machine. Lorsque Spark souhaite lancer une tâche sur une partition, il l'envoie à la machine contenant la partition. Ceci est connu sous le nom de "planification locale".

Sources: Excellents articles de recherche sur Spark: http://spark.Apache.org/research.html

Inclure le document suggéré par Ewan Leith.

7
pgirard

RDD = Jeu de données distribué résilient

Résilient (signification dans le dictionnaire) = (d'une substance ou d'un objet) capable de se remettre en forme ou de reprendre forme après avoir été plié, étiré ou comprimé

RDD est défini comme suit (à partir de LearningSpark - OREILLY): La capacité de toujours recalculer un RDD est en fait la raison pour laquelle les RDD sont appelés «résilients». Lorsqu'un ordinateur contenant des données RDD échoue, Spark l'utilise pour recalculer les partitions manquantes, de manière transparente pour l'utilisateur. .

Cela signifie que les «données» sont sûrement disponibles à tout moment. De plus, Spark peut s'exécuter sans Hadoop et les données ne sont donc PAS répliquées. L'une des meilleures caractéristiques de Hadoop 2.0 est «Haute disponibilité» à l'aide de Passive Standby Namenode. Le même résultat est obtenu par RDD dans Spark.

Un RDD (données) donné peut s'étendre sur différents nœuds d'un cluster Spark (comme dans un cluster basé sur Hadoop).

Si un nœud tombe en panne, Spark peut recalculer le RDD et charger les données dans un autre nœud, et les données sont toujours disponibles . Spark tourne autour du concept d'un ensemble de données réparties résilient, -tolerant collection d'éléments pouvant être utilisés en parallèle ( http://spark.Apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds )

6
SPR

Pour comparer RDD avec la collection scala, voici quelques différences 

  1. Idem mais fonctionne sur un cluster
  2. Paresseux dans la nature où les collections de scala sont strictes 
  3. Le RDD est toujours immuable, c’est-à-dire que vous ne pouvez pas modifier l’état des données de la collection. 
  4. Les RDD sont auto-récupérés, c'est-à-dire tolérants aux pannes 
2
Saketh

RDD (R esilient D istributed D atasets) sont une abstraction permettant de représenter des données. Ils constituent officiellement une collection d'enregistrements partitionnée en lecture seule qui fournit une API pratique.

RDD fournit une solution performante pour le traitement de grands ensembles de données sur des infrastructures de calcul en cluster telles que MapReduce en abordant certains problèmes clés:

  • les données sont conservées en mémoire pour réduire les E/S du disque; cela est particulièrement pertinent pour les calculs itératifs - ne pas avoir à conserver les données intermédiaires sur le disque 
  • la tolérance aux pannes (résilience) est obtenue non pas en répliquant des données, mais en gardant une trace de toutes les transformations appliquées au jeu de données initial (le lignage). De cette façon, en cas de panne, les données perdues peuvent toujours être recalculées à partir de leur lignage et éviter la nouvelle réplication des données réduit la surcharge de stockage. 
  • évaluation paresseuse, c.-à-d. que les calculs sont effectués d’abord quand ils sont nécessaires

Les RDD ont deux limitations principales:

  • ils sont immuables (lecture seule)
  • elles ne permettent que des transformations grossières transformations (c'est-à-dire des opérations qui s'appliquent à l'ensemble de données)

L'un des avantages conceptuels des RDD réside dans le fait qu'ils rassemblent les données et le code, ce qui facilite la réutilisation des pipelines de données.

Sources: Jeux de données distribués résilients: une abstraction à la tolérance de pannes pour le calcul en cluster en mémoire , Une architecture pour le traitement rapide et général de données sur de grands clusters

0
user2314737

RDD est un moyen de représenter des données dans spark. La source de données peut être JSON, un fichier texte CSV ou une autre source. RDD est tolérant aux pannes, ce qui signifie qu’il stocke les données sur plusieurs emplacements (c’est-à-dire que les données sont stockées sous forme distribuée). Ainsi, en cas de défaillance d’un nœud, les données peuvent être récupérées. Cependant, les RDD sont lents et difficiles à coder et sont donc obsolètes . Il a été remplacé par le concept de DataFrame et Dataset.

0
saad