Présentation des étapes Spark
Une étape d'un processus d'exécution n'est qu'un niveau par lequel chacune des tâches doit passer. L'ensemble du travail d'allumage est divisé en plusieurs étapes pour un traitement efficace des données. Chaque tâche est exécutée dans une partition distincte.
Chaque fois qu'une demande de travail spark est soumise à Spark par l'utilisateur, le pilote Spark l'accepte et identifie les différents types d'actions / transformations présentes dans l'application. De plus, ces opérations seront organisées dans un organigramme appelé DAG. Un DAG (Directed Acyclic Graph) est créé chaque fois qu'une action ou une transformation est appelée sur le RDD qui à son tour appelle le DAGScheduler.
La signification de DAG est la suivante:
- Réalisé: Tous les nœuds sont connectés les uns aux autres créant un graphe acyclique. La séquence de ceci est déterminée par les actions appelées sur le RDD.
- Acyclique: Les nœuds ne sont pas connectés en tant que boucle cyclique, c'est-à-dire si une action ou une transformation a été effectuée une fois ne peut pas revenir à sa valeur d'origine.
- Graphique: L'ensemble du motif formé par les bords et les sommets disposés ensemble dans un motif spécifique est appelé un graphique. Les sommets ne sont rien d'autre que les RDD et les bords sont les actions appelées sur le RDD.
DAGScheduler est celui qui divise les étapes en un certain nombre de tâches. Le DAGScheduler transmet ensuite les informations d'étape au gestionnaire de cluster (YARN / Spark autonome) qui déclenche le planificateur de tâches pour exécuter les tâches. Le pilote Spark convertit le plan logique en plan d'exécution physique. Les travaux Spark sont exécutés dans la méthode de pipelining où toutes les tâches de transformation sont combinées en une seule étape.
Transformations
Il existe 2 types de transformations qui ont lieu:
1. Transformations étroites : Ce sont des transformations qui ne nécessitent pas le processus de mélange. Ces actions peuvent être exécutées en une seule étape.
Exemple: map () et filter ()
2. Transformations larges : Ce sont des transformations qui nécessitent un brassage sur différentes partitions. Il nécessite donc la création de différentes étapes pour la communication entre les différentes partitions.
Exemple: ReduceByKey
Prenons un exemple pour mieux comprendre comment cela fonctionne.
Exemple: Dans cet exemple, nous verrons comment fonctionne un simple décompte de mots à l'aide de Spark DAGScheduler.
- val data = sc.textFile ("data.txt")
Résultat: data: org.apache.spark.rdd.RDD (String) = data.txt MapPartitionsRDD (46) at textFile at: 24
Tout d'abord, une opération textFile est effectuée pour lire le fichier texte d'entrée donné à partir de l'emplacement HDFS.
- data.flatMap (_. split ("")). map (i => (i, 1)). ReduceByKey (_ + _). collect
Résultat: res21: Array ((String, Int)) = Array ()
Ensuite, une opération flatMap est effectuée pour diviser les lignes de l'ensemble du fichier d'entrée en différents mots. Ensuite, une opération de mappage est effectuée pour former des paires (clé, valeur) comme (mot, 1) pour chacun des mots. Et la fonction ReduceByKey est appelée pour trouver la somme des comptes pour chaque mot. Enfin, l'action collective donnera le résultat final en collectant toutes les données.
Au cours de ce programme, 2 étapes sont créées par Spark car une transformation est effectuée ici. Pendant l'opération de transformation, le brassage doit être effectué car les données doivent être mélangées entre 2 partitions différentes ou plus. Par conséquent, pour cela, une étape est créée, puis une autre étape unique pour la tâche de transformation est créée.
En interne également, ces étapes seront divisées en tâches. Dans cet exemple, chaque étape est divisée en 2 tâches car il existe 2 partitions. Chaque partition exécute une tâche individuelle.
Types d'étapes d'étincelle
Voici les deux types d'étapes d'étincelle indiqués ci-dessous
1. ShuffleMapStage
Il s'agit essentiellement d'une étape intermédiaire dans le processus d'exécution du DAG. La sortie de cet étage est utilisée comme entrée pour d'autres étages. La sortie de ceci est sous la forme de fichiers de sortie de carte qui peuvent être utilisés ultérieurement en réduisant la tâche. Un ShuffleMapStage est considéré comme prêt lorsque toutes ses sorties de mappage sont disponibles. Parfois, les emplacements de sortie peuvent être manquants dans les cas où les partitions sont perdues ou non disponibles.
Cette étape peut contenir de nombreuses opérations de pipeline telles que map () et filter () avant l'exécution du brassage. Les registres internes outputLocs et _numAvailableOutputs sont utilisés par ShuffleMapStage pour suivre le nombre de sorties de mappage aléatoire. Un seul ShuffleMapStage peut être utilisé couramment dans divers travaux.
2. ResultStage
Comme son nom l'indique, il s'agit de la dernière étape d'un travail Spark qui effectue une opération sur une ou plusieurs partitions d'un RDD pour calculer son résultat. L'initialisation des registres et compteurs internes est effectuée par ResultStage.
Le DAGScheduler soumet les tâches manquantes le cas échéant au ResultStage pour le calcul. Pour le calcul, il nécessite divers paramètres obligatoires tels que stageId, stageAttempId, la variable de diffusion de la tâche sérialisée, la partition, les TaskLocations préférées, outputId, certaines propriétés locales, TaskMetrics de cette étape particulière. Certains des paramètres facultatifs requis sont l'ID de tâche, l'ID d'application et l'ID de tentative d'application.
Avantages de Spark Stages
Voici les différents avantages de Spark Stages:
1. Répartition dynamique des exécuteurs testamentaires
En voyant la chronologie des événements de travail Spark, nous pouvons voir que l'allocation des exécuteurs se fait de manière dynamique. Cela signifie que les exécuteurs sont appelés à partir du cluster en fonction de la charge de travail au cours de l'exécution de la tâche. Il est ensuite renvoyé au cluster dès que son travail est terminé. Cela économise la mémoire d'allocation des ressources et permet aux autres applications exécutées sur le même cluster de réutiliser les exécuteurs. Par conséquent, l'utilisation globale du cluster augmentera et sera optimale.
2. Mise en cache
Les RDD sont mis en cache lors des opérations effectuées sur eux à chaque étape et stockés en mémoire. Cela est utile pour gagner du temps de calcul lorsque le résultat final nécessite que les mêmes RDD soient relus à partir de HDFS.
3. Exécution parallèle
Les travaux Spark indépendants les uns des autres sont exécutés en parallèle, sauf si et jusqu'à ce qu'un brassage soit nécessaire ou que l'entrée d'une étape dépende de sa sortie précédente.
4. Visualisation DAG
Ceci est très utile dans les cas de calculs complexes où de nombreuses opérations et leurs dépendances sont impliquées. En voyant cette visualisation DAG, on peut facilement suivre le flux et identifier les blocages de performances. De plus, on peut voir chacune des tâches exécutées par chaque étape en cliquant sur les étapes affichées dans cette visualisation. Dans cette vue développée, tous les détails des RDD appartenant à cette étape sont affichés.
5. Tolérance aux pannes
En raison de l'opération de mise en cache effectuée sur les RDD, DAG aura un enregistrement de chaque action effectuée sur eux. Supposons donc que dans tous les cas, un RDD est perdu, il peut facilement être récupéré à l'aide du DAG. Le gestionnaire de cluster peut être utilisé pour identifier la partition sur laquelle il a été perdu et le même RDD peut être placé à nouveau sur la même partition pour la récupération de la perte de données.
En raison des avantages mentionnés ci-dessus, Apache Spark est largement utilisé au lieu du MapReduce précédemment utilisé. Les étapes Spark ne sont rien d'autre qu'une version étendue de MapReduce. Étant donné que MapReduce exigeait que les données soient lues et écrites plusieurs fois sur le HDFS, Spark a été introduit qui effectue ces actions dans sa mémoire.
Conclusion
Par conséquent, nous pouvons conclure que les étapes Spark sont plus efficaces en raison de leur calcul en mémoire, de la vitesse de traitement accrue même pour le traitement itératif.
Articles recommandés
Ceci est un guide des étapes Spark. Nous discutons ici des types de transformation et des types et avantages des étapes Spark. Vous pouvez également consulter les articles suivants pour en savoir plus -
- Comment installer Spark
- Spark Streaming
- Carrière à Spark
- Questions d'entretiens chez Spark
- Présentation et 6 principaux composants de Spark