Table des matières:
- La fonction de carte pour Big Data
- Comme la fonction de carte,
- Parfois, produire une liste de sortie est juste suffisant. De même, il est parfois suffisant d'effectuer des opérations sur chaque élément d'une liste. Le plus souvent, vous souhaitez parcourir de grandes quantités de données d'entrée, sélectionner certains éléments dans les données, puis calculer quelque chose de valeur à partir des données pertinentes.
Vidéo: MapReduce - Hadoop | Serge Abiteboul 2024
MapReduce est un framework logiciel idéal pour les big data car il permet aux développeurs d'écrire des programmes capables de traiter de grandes quantités de données non structurées en parallèle à travers un groupe distribué de processeurs.
La fonction de carte pour Big Data
La fonction map fait partie de nombreux langages de programmation fonctionnels depuis des années. La carte a été revigorée en tant que technologie de base pour le traitement des listes d'éléments de données.
Les opérateurs dans les langages fonctionnels ne modifient pas la structure des données; ils créent de nouvelles structures de données en tant que leur sortie. Les données originales elles-mêmes ne sont pas modifiées non plus. Vous pouvez donc utiliser la fonction de carte en toute impunité, car elle ne nuira pas à vos précieuses données stockées.
Un autre avantage de la programmation fonctionnelle est de ne pas avoir à gérer expressément le mouvement ou le flux des données. Cela absout le programmeur de gérer explicitement la sortie de données et le placement. Enfin, l'ordre des opérations sur les données n'est pas prescrit.
Une façon d'accomplir la solution est d'identifier les données d'entrée et de créer une liste:
mylist = ("tous les comtés américains qui ont participé aux dernières élections générales") > Créez la fonction howManyPeople en utilisant la fonction map
. Ceci sélectionne uniquement les comtés de plus de 50 000 personnes: map howManyPeople (mylist) = [howManyPeople "county 1"; combien de gens "comté 2"; combien de gens "comté 3"; combien de gens "comté 4"; …]
Produisez maintenant une nouvelle liste de sortie de tous les comtés de plus de 50 000 habitants:
La fonction s'exécute sans apporter de modifications à la liste d'origine. En outre, vous pouvez voir que chaque élément de la liste de sortie correspond à un élément correspondant de la liste d'entrée, avec un oui ou un non joint. Si le comté a rencontré l'exigence de plus de 50 000 personnes, la fonction de carte l'identifie par un oui. Sinon, un non est indiqué.
Comme la fonction de carte,
réduire est une caractéristique des langages de programmation fonctionnels depuis de nombreuses années. La fonction de réduction prend la sortie d'une fonction de carte et "réduit" la liste de la manière souhaitée par le programmeur. La première étape de la fonction de réduction consiste à placer une valeur dans un élément appelé
accumulateur , qui contient une valeur initiale. Après avoir stocké une valeur de départ dans l'accumulateur, la fonction de réduction traite chaque élément de la liste et effectue l'opération dont vous avez besoin dans la liste.
Supposons que vous deviez identifier les comtés où la majorité des votes étaient pour le candidat démocrate. Rappelez-vous que votre fonction de carte howManyPeople a regardé chaque élément de la liste d'entrée et a créé une liste de sortie des comtés avec plus de 50 000 personnes (oui) et les comtés avec moins de 50 000 personnes (non).
(non, comté 1, oui, comté 2, non, comté 3, oui, comté 4;, comté nnn)
Ceci est maintenant l'entrée pour votre fonction de réduction. Voici à quoi cela ressemble:
countylist = (non, comté 1; oui, comté 2; non, comté 3; oui, comté 4;?, Comté nnn) réduire isDemocrat (countylist)
La fonction de réduction des processus chaque élément de la liste et renvoie une liste de tous les comtés avec une population supérieure à 50 000, où la majorité a voté démocrate.
Mettre la grande carte de données et réduire ensemble
Parfois, produire une liste de sortie est juste suffisant. De même, il est parfois suffisant d'effectuer des opérations sur chaque élément d'une liste. Le plus souvent, vous souhaitez parcourir de grandes quantités de données d'entrée, sélectionner certains éléments dans les données, puis calculer quelque chose de valeur à partir des données pertinentes.
Vous ne voulez pas modifier cette liste d'entrée afin de pouvoir l'utiliser de différentes manières avec de nouvelles hypothèses et de nouvelles données.
Les développeurs de logiciels conçoivent des applications basées sur des algorithmes. Un
algorithme n'est rien d'autre qu'une série d'étapes qui doivent se produire dans le cadre d'un objectif global. Cela peut ressembler à ceci: Commencez avec un grand nombre de données ou d'enregistrements.
-
Itérer sur les données.
-
Utilisez la fonction de carte pour extraire quelque chose d'intéressant et créer une liste de sortie.
-
Organiser la liste de sortie à optimiser pour un traitement ultérieur.
-
Utilisez la fonction de réduction pour calculer un ensemble de résultats.
-
Produire la sortie finale.
-
Les programmeurs peuvent implémenter toutes sortes d'applications en utilisant cette approche, mais les exemples à ce stade ont été très simples, donc la valeur réelle de MapReduce peut ne pas être apparente. Que se passe-t-il lorsque vous avez des données d'entrée extrêmement volumineuses? Pouvez-vous utiliser le même algorithme sur des téraoctets de données? Les bonnes nouvelles sont oui.
Toutes les opérations semblent indépendantes. C'est parce qu'ils sont. Le pouvoir réel de MapReduce est la capacité de diviser et de conquérir. Prenez un très gros problème et divisez-le en morceaux plus petits et plus faciles à gérer, opérez sur chaque morceau indépendamment, puis tirez-le tous ensemble à la fin. De plus, la fonction de carte est commutative - en d'autres termes, l'ordre d'exécution d'une fonction n'a pas d'importance.
MapReduce peut donc effectuer son travail sur différentes machines d'un réseau. Il peut également tirer de multiples sources de données, internes ou externes. MapReduce garde trace de son travail en créant une clé unique pour s'assurer que tout le traitement est lié à la résolution du même problème.Cette touche est également utilisée pour rassembler toutes les sorties à la fin de toutes les tâches distribuées.