apprentissage Spark SEPT - analyse globale des flux

Spark processus global décrit

Insérer ici l'image Description1. Construction de DAG (appeler les méthodes sur le RDD) dans la section de conducteur
2.DAGScheduler le DAG en tranches étape (segmentation est Shuffle), générée à la scène de tâche pour former taskset TaskScheduler, la section de conducteur
3.TaskScheduler l' ordonnancement des tâches ( en fonction des ressources de programmation de tâche correspondant à l'exécuteur), le pilote de segment de
réception de tâches 4.Executor, puis jeté dans le pool de threads de tâche, l'exécuteur

termes courants

Application: Exprimez votre application

Driver: représente la fonction main (), créer SparkContext. ClusterManager responsable de la communication avec le SparkContext, appliquer des ressources, l'attribution des tâches et de suivi. Après l'achèvement de l'exécution du programme fermé SparkContext

Exécuteur: une application d'exécuter un processus sur les nœuds travailleurs, le processus responsable de l'exécution de certaines tâches, et est responsable des données existe sur la mémoire ou d'un disque. Dans Spark en mode fil, le nom du processus est CoarseGrainedExecutor backend, un processus Backend CoarseGrainedExecutor et un seul objet exécuteur testamentaire qui est responsable de l'emballage des tâches dans taskRunner et extrait un thread inactif du pool de threads pour exécuter des tâches, de sorte que tous les une tâche CoarseGrainedExecutorBackend peut fonctionner en parallèle sur les données dépend du nombre qui lui est attribué dans la CPU.

Cluter Gestionnaire: fait référence à l'accès aux ressources sur les services externes cluster. Il existe actuellement trois types

Autonome: la gestion des ressources indigènes d'allumage, responsable de l'allocation des ressources par le Maître

Apache Mesos: bonne Hadoop MR compatibilité avec un cadre de planification des ressources

Hadoop Fils: Fils se réfère principalement à la ResourceManager

Travailleur: un noeud quelconque de la grappe peut exécuter le code d'application, le doigt du milieu est en mode autonome par la configuration du noeud esclave documents travailleurs dans l'étincelle sur le modèle de noeud de fil est NoteManager

Tâche: unité a été envoyée au travail sur un Exécuteur, mais hadoopMR dans MapTask et le concept ReduceTask, est l'unité de base de fonctionnement Application de multiples tâches composé d'une étape, et la planification des tâches et la gestion est la responsabilité de l'TaskScheduler

Fonction: Tâche composition comprenant une pluralité de calcul parallèle, souvent déclenchée par la souvent génération Spark action de produire une pluralité de demande d'emploi

Stade: chaque tâche sont divisés en groupes de travail, comme taskset, dont le nom était étape, la division scène et devrait être responsable de la DAGScheduler, Scène de non-finale (Lecture aléatoire Carte étape) et la phase finale frontière (Résultat Stage) deux types, scène est le lieu de lecture aléatoire d'occurrence

DAGScheduler: La construction du poste (graphe acyclique orienté avec un graphe acyclique orienté), et soumis à la base TaskScheduler Stade Stade de DAG. Divisé étape est basée sur la relation entre la RDD dépendante trouver la méthode de planification le plus bas coût, comme le montre
Insérer ici l'image DescriptionTASKSedulter: sera soumis au travailleur taskset exécuter, chaque exécution des tâches Executor ce qui est ici attribué TaskScheduler maintenir tous taskset ,. rythme cardiaque Executor se produit lorsque le pilote, les ressources de TaskScheduler selon les cas restants tâche appropriés. En outre TaskScheduler maintient également toute étiquette d'exécution des tâches, et nouvelle tentative a échoué tâche. La figure ci - dessous montre l'effet de TaskScheduler
Insérer ici l'image Description

La construction de DAG

Quel est le DAG

  • DAG: graphe orienté acyclique

  • Un DAG est une combinaison d'un ensemble de sommets et d'arêtes. Vertex représente le RDD, les arêtes représentent une série d'actions sur le RDD.

  • DAG est déterminé par le nombre de fois que l'action de déclenchement

  • DAG est commencé dans le RDD par SparkContext créé pour déclencher la fin de l'action, appelant terme d'emploi, est un DAG complet est formé. Une fois que le déclencheur d'action pour former un DAG complet.

  • RDD décrit seulement une partie d'un processus de calcul de données, et à une pluralité de composition DGA RDD, tous décrits aspects (procédés) Procédé de calcul de données

DAG résoudre le problème

DAG pluralité de RDD décrit processus de conversion, l'exécution des tâches, comme décrit dans le DAG peut être réalisée (un ensemble de données de processus pour faire fonctionner) le calcul exact, à savoir, le procédé décrit transformé RDD

DAG apparaît principalement pour répondre aux limites du cadre Hadoop MapReduce. Alors, quelle est les limites de MapReduce il?

Il y a deux:

  • Chaque opérations de MapReduce sont indépendants les uns des autres, Hadoop la carte Réduire ne sait pas ce que sera le prochain.
  • La sortie de chaque étape va persister sur le disque dur ou HDFS.

Lorsqu'il est combiné au-dessus de deux caractéristiques, on peut imaginer, si dans une scène quelques itérations, le cadre MapReduce sur le disque dur lire et écrire HDFS et causer beaucoup de déchets.

Et chaque étape est bloquée à l'étape précédente, alors quand nous avons affaire à des calculs complexes, il faudra beaucoup de temps, mais la quantité de données ne sont pas grandes.

Alors Spark introduit DAG, elle permet d'optimiser les initiatives informatiques, telles que la réduction des données de lecture aléatoire.

segmentation STAGE

DAGScheduler : Le travail de construction de la scène DAG (graphe acyclique orienté graphe orienté acyclique), soumis à une segmentation, conformément à (dépendant de la largeur) shullfe, et soumis à l'étape TaskScheduler. Etape divisée est basée sur la relation entre la méthode de planification de RDD en fonction d'identifier le moindre coût

Pourquoi l'étape de segmentation?

Une logique métier complexe (les données ayant le même attribut sur plusieurs machines polymérisés sur une machine: lecture aléatoire) si aléatoire, alors cela signifie que les résultats produits par l'étage avant à l'étape suivante, l'étape suivante le calcul de données dépendant d'une scène. Dans la même scène, il y aura plusieurs opérateurs peuvent fusionner ensemble, nous appelons ce pipeline (gazoduc: en stricte conformité avec le processus, l'ordre d'exécution)

En raison de lecture aléatoire lié au réseau de transmission et de lecture de disque et d'écriture, et donc une incidence directe sur les performances du remaniement à l'efficacité du processus.

processus aléatoire peut être nécessaire de compléter les procédures suivantes
  • données Repartitionnez

  • transmission de données

  • Compression de données

  • E / S disque

dépendances RDD et dépendant largeur

dépendance RDD, à savoir la relation de dépendance entre le RDD, tels RDD1 -------> RDD2 (RDD1 génération RDD2), RDD2 dépendant de RDD1. Voici généré RDDtransformation d'opération

Zhangze Li

  • dépendance étroite (appelée aussi dépendante de la étroite)

partition parente une seule flèche, envoyé à une partition, les données de la partie partition enfant partage

Du point de vue de la RDD mère: un parent RDD RDD une seule sous-partition est utilisée. Chaque partition du parent RDD ne peut être une partition d'utiliser un enfant RDD

Du point de vue de la RDD des enfants: en fonction de la partie supérieure de la partition RDD savoir partition parente exactement dépendante RDD, et choisiront leurs propres supérieurs RDD partitions sur le même nœud, il n'y a pas de réseau IO frais généraux et efficace . Tels que la carte, flatmap, filtre

  • Large dépendant (également appelé lecture aléatoire dépendant / large dépendant)

Seule la partition principale, une pluralité de flèches, envoyé à une pluralité de cloisons, des données de partition de l'ensemble des sous-partitions

Du point de vue du RDD parental: un RDD mère est divisée en utilisant une pluralité de sous-RDD. Chaque partition peut être multiple parent RDD RDD enfant à charge

Du point de vue du sous-RDD: RDD reposent toutes sur la cloison supérieure ne peut pas identifier la partition de RDD supérieure dépend, en fonction de l'équivalent de l' ensemble des partitions (par exemple reduceByKey) calculées se rapportant à la transmission sur le réseau inter-noeuds

La distinction fondamentale entre la manière : est basée sur si la partition est le même (le même que le nombre de partitions et des règles de séparation)
ou si aléatoire (lecture aléatoire) se produit

Spark dépendra de la raison divisée en étroite et lecture aléatoire:

(1) les dépendances étroites peuvent être supportés sur le même groupe dans l'exécuteur, le conduit de pipeline sous la forme d'une pluralité de commandes d'exécution séquentielle, par exemple, après l'exécution de la carte, réalisée filtre suivant. calcul convergence de partage ne dépend pas des données de toutes les partitions peuvent être calculés en parallèle à différents noeuds. Donc, son incapacité à récupérer plus efficace car il n'a besoin que de recalculer la partition parent manquant peut être,

(2) les dépendances aléatoire auront besoin de toute la partition parente est disponible, pour être pris en compte, etc. Une fois que toutes les données de partition parente de RDD prêt, peuvent aussi avoir besoin d'appeler l'opération est similaire à MapReduce comme le transfert inter-noeuds. Du point de vue de l'échec de restaurer l'apparence, mélanger les dépendances impliquant plusieurs niveaux de RDD de partition parente.

Étapes détaillées:

1. Construction du code de la DAG

calcul d'allumage se produit dans le fonctionnement d' action RDD, et toute la transformation, l' action d'allumage juste avant l'enregistrement de la trace de RDD généré, sans déclencher le calcul réel.
Spark dessinée besoins du noyau pour être calculées au moment de l' occurrence calculée sur un chemin graphe orienté acyclique, qui est DAG.

DAG est divisé en phase 2. L'algorithme de base, par DAGSchedule
Demande d'emploi multiples plus étape:

Spark demande d'action peut être déclenchée en raison des nombreux différents emplois, une application peut avoir plusieurs emplois, chaque travail est constitué par un ou plusieurs de la scène, celui-ci selon la précédente étape Etape, seul l'avant qui dépend après l'étape calculé, à l'arrière de la scène sera exécuté.

base de la Division:

division Stage est basée sur une large dépendant, produire une large lorsqu'elle est dépendante (lecture aléatoire), reduceByKey, groupByKey autre opérateur, peut conduire à l'échelle dépendant.

L'algorithme de base:
  1. Retour de l'analyse inverse avant /, compter sur l'adhésion à la face étroite scène, se sont réunis pour la segmentation en fonction de scène.

  2. noyau Spark commencera à repousser vers l'avant de l'opération de déclenchement RDD action,

  3. Tout d'abord crée une scène pour la dernière RDD,

  4. Et puis continuer à pousser vers le bas, si elle se trouve sur un large RDD dépend, il dépendra de la largeur de la RDD créer une nouvelle étape, le RDD est la dernière étape d'un nouveau RDD.

  5. Et ainsi de suite, de continuer à pousser vers le bas, ou conformément à une étape de séparation dépendant de la dépendance de faible largeur jusqu'à ce que tous les traversal est complet tous les RDD.

3. Soumettre étapes

phase de planification commit, finira par être transformé en un ensemble de tâches soumises, DAGScheduler soumettre ensemble des tâches par l' interface TaskScheduler.
L'ensemble des tâches finira par déclencher une instance TaskScheduler construire TaskSetManager pour gérer le cycle de vie de l'ensemble des tâches,
pour DAGScheduler, le calendrier de travail soumis à cette étape est terminée.
Et la mise en œuvre spécifique sera TaskScheduler obtenue au moment des ressources informatiques, planifier d' autres tâches spécifiques TaskSetManager à l'opération de Executor noeud correspondant.

Insérer ici l'image Description

déclencher le processus global

Insérer ici l'image DescriptionInsérer ici l'image DescriptionInsérer ici l'image Description

processus détaillé d'ensemble

Insérer ici l'image Description

  1. Construction de l'environnement d'exécution d'application Spark
  val conf = new SparkConf();
conf.setAppName("test01")
conf.setMaster("local")
val sc = new SparkContext(conf)
  1. Démarrer SparkContext, SparkContext (pilote) au gestionnaire de ressources (peut être autonome, Mesos, fil) l'application en cours d'exécution des ressources Executor, et initier la connexion au maître

  2. maître de communication RPC et la conduite des travailleurs, de sorte que le début de l'exécuteur des travailleurs

  3. Commencez chaque exécuteur travailleur, exécuteur testamentaire et communiquer leur rapport d'état (processus de référence avant le blog spécifique)

  4. Après RDD déclencheur d'action, basé sur ce dernier RDD déduit des dépendances avant rencontrées shuffler sur la segmentation étape, la segmentation récursive, récursivité à l'exportation n'est pas un RDD RDD parent (algorithmes ont les détails ci-dessus)

/指定以后从哪里读取数据创建RDD(弹性分布式数据集)
    val lines: RDD[String] = sc.textFile("hdfs://node-4:9000/wc1", 1)
     //分区数量
    partitionsNum=lines.partitions.length
    
    //切分压平
    val words: RDD[String] = lines.flatMap(_.split(" "))
    
    //将单词和一组合
    val wordAndOne: RDD[(String, Int)] = words.map((_, 1))
    
    //按key进行聚合
    val reduced:RDD[(String, Int)] = wordAndOne.reduceByKey(_+_)
   
    //排序
    val sorted: RDD[(String, Int)] = reduced.sortBy(_._2, false)
    
    //将结果保存到HDFS中,触发action
    reduced.saveAsTextFile(args(1))
    
    //释放资源
    sc.stop()
  1. DAGSchedulert après la coupe fin de l'étape, à soumettre avant l'étape de l'Ouest, après la mise en œuvre sera présenté plus tard dans une étape de travail de production Stage.Spge, produira beaucoup de la même logique d'affaires de travail, après forme taskset passera TaskScheduler, puis TaskSheduler tâche de la séquence, en fonction des ressources, transmet à chaque exécuteur
  2. Après avoir reçu le Exécuteur tâche, la tâche désérialisation d'abord, puis avec un groupe met en œuvre la classe d'implémentation de l'interface Runnable chargé vers le haut, puis jeté dans l'emballage à la piscine de fil, puis méthode run classe enveloppe est exécutée, qui appelle à son tour la logique de calcul Task
Publié 44 articles originaux · louanges gagnées 0 · Vues 855

Je suppose que tu aimes

Origine blog.csdn.net/heartless_killer/article/details/104754800
conseillé
Classement