Je suis tombé sur une série d'article concernant Google. Comment google réalise l'analyse du contenu du web ?.
Il y a deux possibilités :
Avoir un gros programme qui traite toutes les données ou plusieurs petits programmes qui traitent en même temps les informations.
c'est cette dernière solution qu'utilise google et qui a fait son succès.
On utilise pour cela des principes simples :
- Les données à analyser sont copiées sur des baies de fichier partagées .
- Des milliers de petits programmes s'exécutent en parallèle sur chaque noeud (fonction 'map')
- Les résultats sont agrégés par une fonction de réduction 'reduce'
Exemple : compter des mots dans un texte
Fonction map
(noeud 1)
mot <=> cardinalité
linux 12
processeur 2
web 10
...............
(noeud 2)
mot <=> cardinalité
linux 8
processeur 0
web 3
...............
Par application de la fonction 'reduce' on obtient :
mot <=> cardinalité
linux 20 (12+8)
processeur 2 (2+0)
web 13 (10+3)
...............
L'ensemble du processus est piloté par un programme de surveillance qui relance les programmes défectueux.
Pour du traitement massif d'information, les programmes ne doivent pas hésiter à 'sauter' les lignes erronées.
Ce document ici http://labs.google.com/papers/mapreduce.html expose le processus utilisé par google
Les fonctions map et reduce peu presentes dans des langages impératifs (sauf Ruby ou Python) sont la base des langages fonctionnels.
La fonction reduce possède des synonymes comme 'fold' , 'inject' ou encore 'accumulate'.
Un programmeur élévé aux langages impératifs choisira naturellement de faire un gros programme qui réalisera les traitement en une seule passe. Par contre un pseudo développeur (comme moi) aura tendance à appliquer intutivement les principes de la programmation fonctionnelle. C'est pour cela que j'ai investi dans des livres sur le langage fonctionnel Haskell.
Aucun commentaire:
Enregistrer un commentaire