2017-08-18 1 views
1

Comment le lignage aide-t-il à recalculer les données? Par exemple, j'ai plusieurs noeuds qui calculent des données pendant 30 minutes chacun. Si on échoue après 15 minutes, peut-on recalculer à nouveau les données traitées en 15 minutes en utilisant la lignée sans redonner 15 minutes?Qu'est-ce que Lineage In Spark?

+1

Créer un rdd, faire un tas de transformations sur elle. puis appelez 'toDebugString' sur le RDD. Vous serez en mesure de voir la lignée de ce rdd particulier. – philantrovert

Répondre

7

Everthing pour comprendre le lignage est dans la définition de RDD.

Alors revoyons que:

RDD sont distribués collection immuable des éléments de vos données qui peuvent être stockées dans la mémoire ou d'un disque sur un cluster de machines. Les données sont partitionnées sur des machines de votre cluster pouvant être exploitées en parallèle avec une API de bas niveau offrant des transformations et des actions. RDD sont tolérants aux pannes car ils recueillent des informations de la lignée des données pour reconstruire les données perdues automatiquement en cas d'échec

Donc, il y a principalement 2 choses à comprendre:

Malheureusement, ces sujets sont assez longs à discuter en une seule réponse. Je vous recommande de prendre le temps de les lire avec cet article suivant sur Data Lineage.

Et maintenant, pour répondre à votre question et des doutes:

Si un exécuteur testamentaire échoue calculer vos données, au bout de 15 minutes, il va revenir à votre dernier point de contrôle , que ce soit de la source de ou cache en mémoire et/ou sur le disque. Ainsi, cela ne vous sauvera pas les 15 minutes que vous avez mentionnées!

1

Lorsqu'une transformation (carte ou filtre, etc.) est appelée, elle n'est pas exécutée par Spark immédiatement, mais une lignée est créée pour chaque transformation. Une lignée gardera une trace de ce que toutes les transformations doivent être appliquées sur ce RDD, y compris l'emplacement d'où il doit lire les données.

Par exemple, considérons l'exemple suivant

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

sc.textFile() et myRdd.filter() ne sera pas exécutée immédiatement, il sera exécuté que si une action est appelée sur le RDD - ici filteredRdd.count().

Une action est utilisée pour enregistrer le résultat dans un emplacement ou pour l'afficher. Les informations de lignage RDD peuvent également être imprimées en utilisant la commande filteredRdd.toDebugString (filteredRdd est ici RDD). En outre, Visualisation DAG montre le graphique complet d'une manière très intuitive comme suit: enter image description here