web-dev-qa-db-fra.com

Comment DAG fonctionne sous les couvertures dans RDD?

Le article de recherche Spark a préconisé un nouveau modèle de programmation distribuée par rapport à Hadoop MapReduce classique, revendiquant la simplification et l’amélioration considérable des performances, dans de nombreux cas, en particulier l’apprentissage automatique. Cependant, le matériel pour découvrir le internal mechanics sur Resilient Distributed Datasets avec Directed Acyclic Graph semble manquer dans cet article.

Devrait-il être mieux appris en recherchant le code source?

60
sof

Même j’ai cherché sur le Web pour savoir comment spark) calcule le DAG à partir du RDD et exécute ensuite la tâche.

Au niveau supérieur, lorsqu'une action est appelée sur le RDD, Spark crée le DAG et le soumet au planificateur de DAG.

  • Le planificateur de DAG divise les opérateurs en étapes de tâches. Une étape est composée de tâches basées sur des partitions des données d'entrée. Le planificateur DAG relie les opérateurs. Par exemple De nombreux opérateurs de carte peuvent être programmés en une seule étape. Le résultat final d'un planificateur de DAG est un ensemble d'étapes.

  • Les étapes sont transmises au planificateur de tâches. Le planificateur de tâches lance les tâches via le gestionnaire de cluster (Spark Standalone/Yarn/Mesos). Le planificateur de tâches ne connaît pas les dépendances des étapes.

  • Le travailleur exécute les tâches sur l'esclave.

Venons-en à comment Spark construit le DAG.

Au niveau supérieur, il existe deux transformations qui peuvent être appliquées aux RDD, à savoir transformation étroite et transformation étendue . Les grandes transformations entraînent essentiellement des limites de scène.

La transformation étroite - ne nécessite pas que les données soient brassées à travers les partitions. par exemple, carte, filtre, etc.

transformation étendue - nécessite de mélanger les données, par exemple, réduireByKey, etc.

Prenons un exemple de calcul du nombre de messages de journalisation apparaissant à chaque niveau de gravité,

Voici le fichier journal qui commence par le niveau de gravité,

INFO I'm Info message
WARN I'm a Warn message
INFO I'm another Info message

et créez le code scala) suivant pour extraire le même,

val input = sc.textFile("log.txt")
val splitedLines = input.map(line => line.split(" "))
                        .map(words => (words(0), 1))
                        .reduceByKey{(a,b) => a + b}

Cette séquence de commandes définit implicitement un DAG d’objets RDD (lignée RDD) qui sera utilisé ultérieurement lorsqu’une action est appelée. Chaque DDR conserve un pointeur sur un ou plusieurs parents avec les métadonnées sur le type de relation qu’il entretient avec le parent. Par exemple, lorsque nous appelons val b = a.map() sur un RDD, le RDD b conserve une référence à son parent a, c'est une lignée.

Pour afficher le lignage d'un RDD, Spark fournit une méthode de débogage toDebugString(). Par exemple, en exécutant toDebugString() sur le splitedLines RDD, affichera ce qui suit:

(2) ShuffledRDD[6] at reduceByKey at <console>:25 []
    +-(2) MapPartitionsRDD[5] at map at <console>:24 []
    |  MapPartitionsRDD[4] at map at <console>:23 []
    |  log.txt MapPartitionsRDD[1] at textFile at <console>:21 []
    |  log.txt HadoopRDD[0] at textFile at <console>:21 []

La première ligne (à partir du bas) montre le RDD en entrée. Nous avons créé ce RDD en appelant sc.textFile(). Vous trouverez ci-dessous la vue plus schématique du graphe DAG créé à partir du RDD donné.

RDD DAG graph

Une fois le DAG créé, le planificateur Spark crée un plan d'exécution physique. Comme indiqué ci-dessus, le planificateur DAG divise le graphique en plusieurs étapes. Les étapes sont créées en fonction des transformations. Les transformations étroites seront regroupés (alignés) en une seule étape. Ainsi, pour notre exemple, Spark créera une exécution en deux étapes comme suit:

Stages

Le planificateur de DAG soumettra ensuite les étapes dans le planificateur de tâches. Le nombre de tâches soumises dépend du nombre de partitions présentes dans le fichier texte. Dans l'exemple Fox, nous considérons que nous avons 4 partitions dans cet exemple, puis 4 ensembles de tâches seront créés et soumis en parallèle, à condition qu'il y ait suffisamment d'esclaves/cœurs. Le diagramme ci-dessous illustre ceci plus en détail:

Task execustion

Pour des informations plus détaillées, je vous suggère de visionner les vidéos sur youtube suivantes où les créateurs Spark donnent des détails détaillés sur le DAG, le plan d’exécution et la durée de vie.

  1. Advanced Apache Spark - Sameer Farooqui (Databricks)
  2. Une compréhension plus profonde de Spark Internals - Aaron Davidson (Databricks)
  3. Introduction à AmpLab Spark Internals
138
Sathish

Début Spark 1.4 _ la visualisation des données a été ajoutée à travers les trois composants suivants, où elle fournit également une représentation graphique claire de DAG.

  • Vue chronologique des événements Spark

  • DAG d'exécution

  • Visualisation de Spark Statistiques en streaming

Reportez-vous à lien pour plus d'informations.

5
bdcloud