1
2
Présentée par Hamza Ben Marzouk
3
Hadoop
4
Ce fameux éléphant
• Doug Cutting principal
créateur de Hadoop
en 2002.
5
Mise en situation
6
Avant Hadoop
Les données surpassent la capacité des machines
7
Calcul distribué
• SETI@Home/BOINC un des parents de Hadoop,
A l'origine, un des premiers logiciels à permettre le calcul
distribué via l'utilisation des ordinateurs de volontaires
tout autour du monde.
Son objectif était de détecter d'éventuels signes de
civilisations
extra-terrestres en analysant des signaux radios reçus par
l'observatoire Arecibo au Porto Rico.
8
Que cherchons nous?
● Accès et partage des ressources pour toutes les machines.
● Extensibilité: on doit pouvoir ajouter de nouvelles machines pour le calcul si
nécessaire.
● Hétérogénéité: les machines doivent pouvoir avoir différentes architectures,
l'implémentation différents langages.
● Tolérance aux pannes: une machine en panne faisant partie du cluster ne
doit
pas produire d'erreur pour le calcul dans son ensemble.
● Transparence: le cluster dans son ensemble doit être utilisable comme une
seule et même machine « traditionnelle ».
9
Qui utilise Hadoop
10
http://wiki.apache.org/hadoop/PoweredBy
Quelques chiffres !
Estimations IDC: croissance de 60% par an
de l'industrie « Big Data », pour un
marché de 813 millions de dollars en 2016
uniquement pour la vente de logiciels
autour de Hadoop.
11
Pourquoi Hadoop est un succès ?
● Projet de la fondation Apache – Open Source (disponibilité)
● Modèle simple pour les développeurs
● Déployable très facilement ,configuration très simple.
● S'occupe de toutes les problématiques liées au calcul distribué
le programmeur a simplement à s'occuper du
développement logiciel pour l'exécution de la tâche.
12
Hadoop
13
Comment ça fonctionne ?
14
MAP/REDUCE
15
Map/Reduce
• Map/Reduce est un paradigme (suivant le
stratégie algorithmique divide and
conquer) visant à exécuter un problème
large de manière distribué en découpant le
problème en plusieurs problèmes de taille
réduite.
16
Map/Reduce
MapReduce définit deux opérations distinctes à effectuer sur les
données d'entrée:
● La première, MAP, va transformer les données d'entrée en une série de
couples clef/valeur. Elle va regrouper les données en les associant à des clefs,
choisies de telle sorte que les couples clef/valeur aient un sens par rapport au
problème à résoudre.
Par ailleurs, cette opération doit être parallélisable
● La seconde, REDUCE, va appliquer un traitement à toutes les valeurs de
chacune des clefs distinctes produite par l'opération MAP. Au terme de
l'opération REDUCE, on aura un résultat pour chacune des clefs distinctes.
17
Map/Reduce
Pour résoudre un problème via la méthodologie MapReduce avec
Hadoop, on devra donc:
● Choisir une manière de découper les données d'entrée de telle sorte
que l'opération MAP soit parallélisable.
● Définir quelle CLEF utiliser pour notre problème.
● Écrire le programme pour l'opération MAP.
● Ecrire le programme pour l'opération REDUCE.
… et Hadoop se chargera du reste (problématiques calcul distribué,
groupement par clef distincte entre MAP et REDUCE, etc.).
18
Exemple concret WCount
19
WCount
20
WCount
21
WCount
22
WCount
23
Map/Reduce
24
Résumons
25
26
Hadoop
HDFS
27
HDFS
• Pour stocker les données en entrée de nos tâches
Hadoop, ainsi que
• les résultats de nos traitements, on va utiliser
HDFS:
Hadoop Distributed FileSystem
• Il s'agit du système de fichier standard de Hadoop
- au même sens que les systèmes de fichiers
FAT32, NTFS ou encore Ext3FS, à la différence qu'il
est évidemment distribué.
28
HDFS
Les caractéristiques de HDFS:
● Il est distribué: les données sont réparties
sur tout le cluster de machines.
● Il est répliqué: si une des machines du
cluster tombe en panne, aucune
donnée n'est perdue.
29
HDFS
30
HDFS
HDFS repose sur deux serveurs (des daemons):
● Le NameNode, qui stocke les informations relatives aux noms de fichiers.
C'est ce serveur qui, par exemple, va savoir que le fichier « livre_5321 » dans
le répertoire « data_input » comporte 58 blocs de données, et qui sait où ils se
trouvent. Il y a un seul NameNode dans tout le cluster Hadoop.
● Le DataNode, qui stocke les blocs de données eux-mêmes. Il y a un DataNode
pour chaque machine au sein du cluster, et ils sont en communication
constante avec le NameNode .
Par défaut, les données sont divisées en blocs de 64KB (configurable).
31
HDFS
32
Prenons un exemple
33
Prenons un exemple
34
Remarques HDFS
● La gestion du stockage est assurée par les
daemons Hadoop donc on a pas à se
soucier d'où sont stockées les données.
● Possibilité d’extraire des donnés à partir d’une
base de données classique
35
Architecture de Hadoop
36
Architecture de Hadoop
Comme pour HDFS, la gestion des tâches de Hadoop se base sur deux serveurs
(les daemons NameNode et DataNode) :
● Le JobTracker, qui va directement recevoir la tâche à exécuter (un .jar Java),
ainsi que les données d'entrées (nom des fichiers stockés sur HDFS) et le
répertoire où stocker les données de sortie (toujours sur HDFS).
Il y a un seul JobTracker sur une seule machine du cluster Hadoop. Le JobTracker est en
communication avec le NameNode de HDFS et sait donc où sont les données.
● Le TaskTracker, qui est en communication constante avec le JobTracker et va
recevoir les opérations simples à effectuer (MAP/REDUCE) ainsi que les blocs
de données correspondants (stockés sur HDFS). Il y a un TaskTracker sur
chaque machine du cluster.
37
Architecture de Hadoop
38
Remarque
• Généralement, on place le JobTracker et le NameNode HDFS
sur la même machine (une machine plus puissante que les
autres), sans y placer de TaskTracker/DataNode HDFS pour
limiter la charge.
• Cette machine particulière au sein du cluster (qui contient les
deux « gestionnaires », de tâches et de fichiers) est
communément appelée le noeud maître (« Master Node »).
• Les autres nœuds (contenant TaskTracker + DataNode) sont
communément appelés nœuds esclaves (« slave node »).
39
Architecture Générale
40
Avec Hadoop
41
Avec Hadoop
42
Hive est une infrastructure pour dépôt de données (Data warehouse)
développée pour Hadoop et qui a pour rôle de stocker des données
sur HDFS et aussi de compiler les requêtes SQL en jobs Map/Reduce et
les executer sur le cluster Hadoop.
Hive utilise un language proche du SQL : HiveQL
Avec Hadoop
• Le projet Pig se positionne comme Hive dans le sens où il fournit aux
développeurs un langage de haut niveau (PigLatin) dédié à l'analyse de gros
volumes de données. Il s'adresse alors aux développeurs habitués à faire des
scripts via Bash ou Python par exemple qui seront traduits en des
programmes Map/Reduce que Hadoop va exécuter sur le cluster.
43
Avec Hadoop
• HBase permet l'intégration à Hadoop d'un système de
stockage par clé/valeur appelé couramment stockage
binaire ou key/value store en anglais.
• Ce sous-projet à Hadoop est également inspiré par le
projet BigTable de Google.
44
Programmation Hadoop
45
Remarque
Hadoop est essentiellement piloté par des outils
consoles (CLI), mais
quelques interfaces utilisateurs sont mises à
disposition de l'utilisateur
46
Exemple Interface JobTracker
47
Programmation Hadoop
Les tâches MAP/REDUCE sont implémentables par le biais d'interfaces Java
Un programme Hadoop se compile au sein d'un .jar.
Pour développer un programme Hadoop, on va créer trois classes distinctes:
● Une classe dite « Driver » qui contient la fonction main du programme. Cette
classe se chargera d'informer Hadoop des types de données clef/valeur
utilisées, des classes se chargeant des opérations MAP et REDUCE, et des
fichiers HDFS à utiliser pour les entrées/sorties.
● Une classe MAP (qui effectuera l'opération MAP).
● Une classe REDUCE (qui effectuera l'opération REDUCE).
48
Programmation
La classe Driver contient le main de notre programme.
Au sein du main() en question, on va effectuer les opérations suivantes:
● Créer un objet Configuration de Hadoop, qui est nécessaire pour permettre à
Hadoop d'obtenir la configuration générale du cluster
● Permettre à Hadoop de récupérer d'éventuels arguments génériques
disponibles sur la ligne de commande (par exemple le nom du package de la
tâche à exécuter si le .jar en contient plusieurs). On va également récupérer
les arguments supplémentaires pour s'en servir (Input et Output)
49
Programmation
● Créer un nouvel objet Hadoop Job, qui désigne une tâche Hadoop.
● Utiliser cet objet Job pour informer Hadoop du nom de nos classes Driver,
MAP et REDUCE.
● Utiliser le même objet pour informer Hadoop des types de données utilisés
dans notre programme pour les couples (clef;valeur) MAP et REDUCE.
● Informer Hadoop des fichiers d'entrée/sortie pour notre tâche sur HDFS.
● Enfin, utiliser l'objet Job créé précédemment pour déclencher le lancement
de la tâche via le cluster Hadoop.
On reprend ici l'exemple du compteur d’occurrences de mots décrit
précédemment.
50
Classe Driver
51
Classe Driver
52
Classe Driver
53
Classe Driver
54
Classe Driver
55
Classe Driver
56
Classe Driver
57
Classe Map
58
Classe Map
59
Classe Map
60
Classe Map
61
Classe Reduce
62
Classe Reduce
63
Classe Reduce
64
Classe Reduce
65
À noter
La commande permettant de stocker ou extraire des
fichiers de HDFS est l'utilitaire console hadoop, avec l'option fs.
Il réplique globalement les commandes systèmes standard Linux, et est très
simple à utiliser:
● hadoop fs -put livre.txt /data_input/livre.txt
Pour stocker le fichier livre.txt sur HDFS dans le répertoire /data_input.
● hadoop fs -get /data_input/livre.txt livre.txt
Pour obtenir le fichier /data_input/livre.txt de HDFS et le stocker dans le fichier
local livre.txt.
● hadoop fs -mkdir /data_input
Pour créer le répertoire /data_input
● hadoop fs -rm /data_input/livre.txt
Pour supprimer le fichier /data_input/livre.txt
d'autres commandes usuelles: -ls, -cp, -rmr, -du, etc...
66
Remarques
67
Autres langages: streaming
68
Voyons les résultats
69
• Sources bibliographique :
http://cours.tokidev.fr/bigdata
• Hadoop User Group France
• wikipedia.org
70
71

Présentation Hadoop SECURINETS INSAT (MAP & REDUCE )

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
    Ce fameux éléphant •Doug Cutting principal créateur de Hadoop en 2002. 5
  • 6.
  • 7.
    Avant Hadoop Les donnéessurpassent la capacité des machines 7
  • 8.
    Calcul distribué • SETI@Home/BOINCun des parents de Hadoop, A l'origine, un des premiers logiciels à permettre le calcul distribué via l'utilisation des ordinateurs de volontaires tout autour du monde. Son objectif était de détecter d'éventuels signes de civilisations extra-terrestres en analysant des signaux radios reçus par l'observatoire Arecibo au Porto Rico. 8
  • 9.
    Que cherchons nous? ●Accès et partage des ressources pour toutes les machines. ● Extensibilité: on doit pouvoir ajouter de nouvelles machines pour le calcul si nécessaire. ● Hétérogénéité: les machines doivent pouvoir avoir différentes architectures, l'implémentation différents langages. ● Tolérance aux pannes: une machine en panne faisant partie du cluster ne doit pas produire d'erreur pour le calcul dans son ensemble. ● Transparence: le cluster dans son ensemble doit être utilisable comme une seule et même machine « traditionnelle ». 9
  • 10.
  • 11.
    Quelques chiffres ! EstimationsIDC: croissance de 60% par an de l'industrie « Big Data », pour un marché de 813 millions de dollars en 2016 uniquement pour la vente de logiciels autour de Hadoop. 11
  • 12.
    Pourquoi Hadoop estun succès ? ● Projet de la fondation Apache – Open Source (disponibilité) ● Modèle simple pour les développeurs ● Déployable très facilement ,configuration très simple. ● S'occupe de toutes les problématiques liées au calcul distribué le programmeur a simplement à s'occuper du développement logiciel pour l'exécution de la tâche. 12
  • 13.
  • 14.
  • 15.
  • 16.
    Map/Reduce • Map/Reduce estun paradigme (suivant le stratégie algorithmique divide and conquer) visant à exécuter un problème large de manière distribué en découpant le problème en plusieurs problèmes de taille réduite. 16
  • 17.
    Map/Reduce MapReduce définit deuxopérations distinctes à effectuer sur les données d'entrée: ● La première, MAP, va transformer les données d'entrée en une série de couples clef/valeur. Elle va regrouper les données en les associant à des clefs, choisies de telle sorte que les couples clef/valeur aient un sens par rapport au problème à résoudre. Par ailleurs, cette opération doit être parallélisable ● La seconde, REDUCE, va appliquer un traitement à toutes les valeurs de chacune des clefs distinctes produite par l'opération MAP. Au terme de l'opération REDUCE, on aura un résultat pour chacune des clefs distinctes. 17
  • 18.
    Map/Reduce Pour résoudre unproblème via la méthodologie MapReduce avec Hadoop, on devra donc: ● Choisir une manière de découper les données d'entrée de telle sorte que l'opération MAP soit parallélisable. ● Définir quelle CLEF utiliser pour notre problème. ● Écrire le programme pour l'opération MAP. ● Ecrire le programme pour l'opération REDUCE. … et Hadoop se chargera du reste (problématiques calcul distribué, groupement par clef distincte entre MAP et REDUCE, etc.). 18
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
    HDFS • Pour stockerles données en entrée de nos tâches Hadoop, ainsi que • les résultats de nos traitements, on va utiliser HDFS: Hadoop Distributed FileSystem • Il s'agit du système de fichier standard de Hadoop - au même sens que les systèmes de fichiers FAT32, NTFS ou encore Ext3FS, à la différence qu'il est évidemment distribué. 28
  • 29.
    HDFS Les caractéristiques deHDFS: ● Il est distribué: les données sont réparties sur tout le cluster de machines. ● Il est répliqué: si une des machines du cluster tombe en panne, aucune donnée n'est perdue. 29
  • 30.
  • 31.
    HDFS HDFS repose surdeux serveurs (des daemons): ● Le NameNode, qui stocke les informations relatives aux noms de fichiers. C'est ce serveur qui, par exemple, va savoir que le fichier « livre_5321 » dans le répertoire « data_input » comporte 58 blocs de données, et qui sait où ils se trouvent. Il y a un seul NameNode dans tout le cluster Hadoop. ● Le DataNode, qui stocke les blocs de données eux-mêmes. Il y a un DataNode pour chaque machine au sein du cluster, et ils sont en communication constante avec le NameNode . Par défaut, les données sont divisées en blocs de 64KB (configurable). 31
  • 32.
  • 33.
  • 34.
  • 35.
    Remarques HDFS ● Lagestion du stockage est assurée par les daemons Hadoop donc on a pas à se soucier d'où sont stockées les données. ● Possibilité d’extraire des donnés à partir d’une base de données classique 35
  • 36.
  • 37.
    Architecture de Hadoop Commepour HDFS, la gestion des tâches de Hadoop se base sur deux serveurs (les daemons NameNode et DataNode) : ● Le JobTracker, qui va directement recevoir la tâche à exécuter (un .jar Java), ainsi que les données d'entrées (nom des fichiers stockés sur HDFS) et le répertoire où stocker les données de sortie (toujours sur HDFS). Il y a un seul JobTracker sur une seule machine du cluster Hadoop. Le JobTracker est en communication avec le NameNode de HDFS et sait donc où sont les données. ● Le TaskTracker, qui est en communication constante avec le JobTracker et va recevoir les opérations simples à effectuer (MAP/REDUCE) ainsi que les blocs de données correspondants (stockés sur HDFS). Il y a un TaskTracker sur chaque machine du cluster. 37
  • 38.
  • 39.
    Remarque • Généralement, onplace le JobTracker et le NameNode HDFS sur la même machine (une machine plus puissante que les autres), sans y placer de TaskTracker/DataNode HDFS pour limiter la charge. • Cette machine particulière au sein du cluster (qui contient les deux « gestionnaires », de tâches et de fichiers) est communément appelée le noeud maître (« Master Node »). • Les autres nœuds (contenant TaskTracker + DataNode) sont communément appelés nœuds esclaves (« slave node »). 39
  • 40.
  • 41.
  • 42.
    Avec Hadoop 42 Hive estune infrastructure pour dépôt de données (Data warehouse) développée pour Hadoop et qui a pour rôle de stocker des données sur HDFS et aussi de compiler les requêtes SQL en jobs Map/Reduce et les executer sur le cluster Hadoop. Hive utilise un language proche du SQL : HiveQL
  • 43.
    Avec Hadoop • Leprojet Pig se positionne comme Hive dans le sens où il fournit aux développeurs un langage de haut niveau (PigLatin) dédié à l'analyse de gros volumes de données. Il s'adresse alors aux développeurs habitués à faire des scripts via Bash ou Python par exemple qui seront traduits en des programmes Map/Reduce que Hadoop va exécuter sur le cluster. 43
  • 44.
    Avec Hadoop • HBasepermet l'intégration à Hadoop d'un système de stockage par clé/valeur appelé couramment stockage binaire ou key/value store en anglais. • Ce sous-projet à Hadoop est également inspiré par le projet BigTable de Google. 44
  • 45.
  • 46.
    Remarque Hadoop est essentiellementpiloté par des outils consoles (CLI), mais quelques interfaces utilisateurs sont mises à disposition de l'utilisateur 46
  • 47.
  • 48.
    Programmation Hadoop Les tâchesMAP/REDUCE sont implémentables par le biais d'interfaces Java Un programme Hadoop se compile au sein d'un .jar. Pour développer un programme Hadoop, on va créer trois classes distinctes: ● Une classe dite « Driver » qui contient la fonction main du programme. Cette classe se chargera d'informer Hadoop des types de données clef/valeur utilisées, des classes se chargeant des opérations MAP et REDUCE, et des fichiers HDFS à utiliser pour les entrées/sorties. ● Une classe MAP (qui effectuera l'opération MAP). ● Une classe REDUCE (qui effectuera l'opération REDUCE). 48
  • 49.
    Programmation La classe Drivercontient le main de notre programme. Au sein du main() en question, on va effectuer les opérations suivantes: ● Créer un objet Configuration de Hadoop, qui est nécessaire pour permettre à Hadoop d'obtenir la configuration générale du cluster ● Permettre à Hadoop de récupérer d'éventuels arguments génériques disponibles sur la ligne de commande (par exemple le nom du package de la tâche à exécuter si le .jar en contient plusieurs). On va également récupérer les arguments supplémentaires pour s'en servir (Input et Output) 49
  • 50.
    Programmation ● Créer unnouvel objet Hadoop Job, qui désigne une tâche Hadoop. ● Utiliser cet objet Job pour informer Hadoop du nom de nos classes Driver, MAP et REDUCE. ● Utiliser le même objet pour informer Hadoop des types de données utilisés dans notre programme pour les couples (clef;valeur) MAP et REDUCE. ● Informer Hadoop des fichiers d'entrée/sortie pour notre tâche sur HDFS. ● Enfin, utiliser l'objet Job créé précédemment pour déclencher le lancement de la tâche via le cluster Hadoop. On reprend ici l'exemple du compteur d’occurrences de mots décrit précédemment. 50
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
    À noter La commandepermettant de stocker ou extraire des fichiers de HDFS est l'utilitaire console hadoop, avec l'option fs. Il réplique globalement les commandes systèmes standard Linux, et est très simple à utiliser: ● hadoop fs -put livre.txt /data_input/livre.txt Pour stocker le fichier livre.txt sur HDFS dans le répertoire /data_input. ● hadoop fs -get /data_input/livre.txt livre.txt Pour obtenir le fichier /data_input/livre.txt de HDFS et le stocker dans le fichier local livre.txt. ● hadoop fs -mkdir /data_input Pour créer le répertoire /data_input ● hadoop fs -rm /data_input/livre.txt Pour supprimer le fichier /data_input/livre.txt d'autres commandes usuelles: -ls, -cp, -rmr, -du, etc... 66
  • 67.
  • 68.
  • 69.
  • 70.
    • Sources bibliographique: http://cours.tokidev.fr/bigdata • Hadoop User Group France • wikipedia.org 70
  • 71.