Technologies pour le Big Data
par
Minyar Sassi Hidri
Département Technologies de l’Information et de la Communication
Ecole Nationale d’Ingénieurs de Tunis
Novembre 2016
Minyar Sassi Hidri Technologies pour le Big Data 1 / 227
Plan
1 Chapitre 1 : Introduction au Big Data
2 Chapitre 2 : Hadoop, MapReduce et le Big Data
3 Chapitre 3 : Programmation MapReduce sous Hadoop
4 Chapitre 4 : Traitement de données et requêtage sous
Hadoop
Minyar Sassi Hidri Technologies pour le Big Data 2 / 227
Chapitre 1 - Introduction au Big Data
1 Big Data : Faits, Intérêts, Sources et Challenges
2 Qu’est-ce que le Big Data ?
3 Problématique et termes clés
4 Forces majeurs
5 Importance et défis du Big Data
6 Big Data et décisionnel
7 Approche traditionnelle versus approche Big Data
8 Mise en place du Big Data : des chantiers de grande ampleur
9 Enjeux stratégiques
10 Enjeux technologiques
Minyar Sassi Hidri Technologies pour le Big Data 3 / 227
Big Data : Faits, Intérêts, Sources et Challenges
1 Big Data : Faits, Intérêts, Sources et Challenges
2 Qu’est-ce que le Big Data ?
Historique & contexte
Définition
Est-ce une innovation ?
Vocabulaire
3 Problématique et termes clés
4 Forces majeurs
5 Importance et défis du Big Data
6 Big Data et décisionnel
7 Approche traditionnelle versus approche Big Data
Approche traditionnelle
Approche Big Data
Fusion de deux approches
8 Mise en place du Big Data : des chantiers de grande ampleur
9 Enjeux stratégiques
Big Data : pour qui, pour quoi ?
Impacts du Big Data dans l’entreprise
10 Enjeux technologiques
Minyar Sassi Hidri Technologies pour le Big Data 4 / 227
Big Data : Faits, Intérêts, Sources et Challenges Big Data : Faits
Big Data : Faits
Source : IBM
Minyar Sassi Hidri Technologies pour le Big Data 5 / 227
Big Data : Faits, Intérêts, Sources et Challenges Big Data : Faits
Big Data : Faits
I Chaque jour, nous générons 2.5 trillions d’octets de données.
I 90% des données dans le monde ont été créées au cours des deux dernières années.
I Sources :
- Capteurs utilisés pour collecter les informations climatiques.
- Messages sur les médias sociaux.
- Images numériques et vidéos publiées en ligne.
- Enregistrements transactionnels d’achat en ligne.
- Signaux GPS de téléphones mobiles.
- ...
Minyar Sassi Hidri Technologies pour le Big Data 6 / 227
Big Data : Faits, Intérêts, Sources et Challenges Big Data : Faits
Big Data : Faits
I Chaque jour, nous générons 2.5 trillions d’octets de données.
I 90% des données dans le monde ont été créées au cours des deux dernières années.
I Sources :
- Capteurs utilisés pour collecter les informations climatiques.
- Messages sur les médias sociaux.
- Images numériques et vidéos publiées en ligne.
- Enregistrements transactionnels d’achat en ligne.
- Signaux GPS de téléphones mobiles.
- ...
I Chiffres clés
- Plus de 2 milliards de vidéos regardées sur Youtube chaque jour et 220 milliards de
recherche sur Google chaque mois.
- 30 milliards de contenus statut, photo, vidéo, événement, etc. sont ajoutés sur Face-
book par mois par plus de 600 millions d’utilisateurs actifs.
- Le nombre d’appareils connectés à Internet a dépassé le nombre d’humains en 2008.
- La compagnie de Social Games traite 1 Petabyte (1 million de GB) de données chaque
jour.
- Le marché du Big Data et des Big Analytics (ou broyage de données) pourraient
représenter près de 250 milliards de dollars sur 4 ans.
Minyar Sassi Hidri Technologies pour le Big Data 6 / 227
Big Data : Faits, Intérêts, Sources et Challenges Big Data : Intérêts
Big Data : Intérêts
I 1/3
- Chefs d’entreprise prennent fréquemment des décisions basées sur
des informations en lesquelles ils n’ont pas confiance, ou qu’ils
n’ont pas.
I 1/2
- Chefs d’entreprise disent qu’ils n’ont pas accès aux informations
dont ils ont besoin pour faire leur travail.
I 83%
- Des DSI (Directeurs des SI) citent : l’informatique décisionnelle et
analytique comme faisant partie de leurs plans pour améliorer leur
compétitivité.
I 60%
- Des PDG ont besoin d’améliorer la capture et la compréhension
des informations pour prendre des décisions plus rapidement.
Minyar Sassi Hidri Technologies pour le Big Data 7 / 227
Big Data : Faits, Intérêts, Sources et Challenges Big Data : Intérêts
Big Data : Sources (1)
I Sources multiples : sites, Bases de Données, téléphones, serveurs :
- Détecter les sentiments et les réactions des clients.
Détecter les conditions critiques ou potentiellement mortelles dans les
hôpitaux, et à temps pour intervenir.
- Prédire des modèles météorologiques pour planifier l’usage optimal des
éoliennes.
- Prendre des décisions risquées basées sur des données transactionnelles
en temps réel.
- Identifier les criminels et les menaces à partir de vidéos, sons et flux de
données.
- ´Etudier les réactions des étudiants pendant un cours, prédire ceux qui
vont réussir, d’après les statistiques et modèles réunis au long des années
(domaine Big Data in Education).
Minyar Sassi Hidri Technologies pour le Big Data 8 / 227
Big Data : Faits, Intérêts, Sources et Challenges Big Data : Sources
Big Data : Sources (2)
I Les données massives sont le résultat de la rencontre de trois éléments
essentiels qui sont :
- Internet.
- Les réseaux sociaux.
- Les appareils intelligents : les ordinateurs, les tablettes, les smartphones, les objets
connectés...
- L’Internet permet la transmission de l’information quelle que soit sa
forme sur les appareils intelligents :
Appareil intelligent : création de données.
Utilisateur des réseaux sociaux : consommateur.
Internet : vecteur de transmission.
Minyar Sassi Hidri Technologies pour le Big Data 9 / 227
Big Data : Faits, Intérêts, Sources et Challenges Big Data : Challenges
Big Data : Challenges
? Réunir un grand volume de données variées pour trouver de nouvelles idées.
? Difficulté pour sauvegarder toutes ces données.
? Difficulté pour traiter ces données et les utiliser.
? Les données sont créées rapidement.
Minyar Sassi Hidri Technologies pour le Big Data 10 / 227
Qu’est-ce que le Big Data ?
1 Big Data : Faits, Intérêts, Sources et Challenges
2 Qu’est-ce que le Big Data ?
Historique & contexte
Définition
Est-ce une innovation ?
Vocabulaire
3 Problématique et termes clés
4 Forces majeurs
5 Importance et défis du Big Data
6 Big Data et décisionnel
7 Approche traditionnelle versus approche Big Data
Approche traditionnelle
Approche Big Data
Fusion de deux approches
8 Mise en place du Big Data : des chantiers de grande ampleur
9 Enjeux stratégiques
Big Data : pour qui, pour quoi ?
Impacts du Big Data dans l’entreprise
10 Enjeux technologiques
Minyar Sassi Hidri Technologies pour le Big Data 11 / 227
Qu’est-ce que le Big Data ? Historique & contexte
Historique & contexte
I L’évolution du SI amène
les entreprises à traiter de
plus en plus de données
issues de sources toujours
plus variées.
I Les prévisions de taux
de croissance des vo-
lumes de données trai-
tées dépassent les limites
des technologies tradition-
nelles.
I On parle de Petaoctet
(billiard d’octets) (ou Pe-
tabyte) voir de Zettaoc-
tet (Trilliard d’octets) (ou
Zettabyte).
⇒ Quelle solution pour
exploiter ces données ?
Minyar Sassi Hidri Technologies pour le Big Data 12 / 227
Qu’est-ce que le Big Data ? Définition
Définition
I Big Data : Exploration de très vastes ensembles de données pour obtenir
des renseignements utilisables.
I Le terme Big Data se réfère aux technologies qui permettent aux entreprises
d’analyser rapidement un volume de données très important et d’obtenir une
vue synoptique.
I En mixant intégration de stockage, analyse prédictive et applications, le Big
Data permet de gagner en temps, en efficacité et en qualité dans l’interpré-
tation de données.
I Les objectifs de ces solutions d’intégration et de traitements des données
sont de traiter un volume très important de données aussi bien structurées
que non structurées, se trouvant sur des terminaux variés (PC, smartphones,
tablettes, objets communicants...), produites ou non en temps réel depuis
n’importe quelle zone géographique dans le monde.
⇒ Le Big Data sera un outil majeur à la fois pour la prise de décisions et
l’optimisation de la compétitivité au sein des entreprises ?
Minyar Sassi Hidri Technologies pour le Big Data 13 / 227
Qu’est-ce que le Big Data ? Définition
Définition : Autres notions
Autour du Big Data, on trouve également les termes :
I Open Data : Une donnée ouverte est une donnée qui peut être librement
utilisée, réutilisée et redistribuée par quiconque. Ce qu’ouvert signifie ⇒ L’in-
teropérabilité.
- Capacité de divers systèmes et organisations à travailler ensemble (inter-opérer). Dans
ce cas, c’est la capacité d’interopérer - ou entremêler - des ensembles de données
différents.
I Little Data : Parfois utilisée pour permettre aux entreprises qui n’auraient
pas les 3V pour utiliser les technologies Big Data.
I Smart Data : La Smart Data permet de se focaliser uniquement sur les
données utiles. Nouvelle expression synonyme de Business Intelligence (Infor-
matique décisionnelle).
- En 2013, le Big Data s’est retrouvé au cœur de toutes les conversations. Cependant,
le Big Data c’est un gros volume de données parfois inexploitable et peu pertinent.
- Toutes les données ne sont pas bonnes à prendre et demandent beaucoup de temps
à exploiter.
Attention à ne pas être confronté au final au Bad Data !
Minyar Sassi Hidri Technologies pour le Big Data 14 / 227
Qu’est-ce que le Big Data ? Est-ce une innovation ?
Big Data : Est-ce une innovation ?
I L’explosion des volumes
des données nécessite une
innovation en terme de :
- Acceleration matérielle :
Abandon des disques durs
au profit des mémoires dy-
namiques DRAM (Dynamic
Random Access Memory :
mémoire vive dynamique)
ou flash.
⇒ Meilleur benefice des
processeurs multicœurs.
I Bases de données d’analyse massivement parallèle (MPP) : Ces bases de données conformes
SQL sont conc¸ues pour répartir le traitement des données sur plusieurs machines.
I Modèle Map-Reduce, Hadoop et autres approches NoSQL : Ces approches permettent
d’accéder aux données via des langages de programmation sans utiliser les interfaces basées
sur SQL et permettent de répartir les données sur plusieurs machines distinctes.
Minyar Sassi Hidri Technologies pour le Big Data 15 / 227
Qu’est-ce que le Big Data ? Vocabulaire
Vocabulaire
I Not Only SQL / Bases sans schéma : Catégorie de systèmes de gestion de
base de données (SGBD) qui n’est plus fondée sur l’architecture classique des
bases relationnelles. L’unite logique n’y est plus la table, et les données ne
sont en general pas manipulees avec SQL.
I MapReduce : modèle de programmation permettant de manipuler de grandes
quantités de données non obligatoirement structurées.
I Hadoop / Cassandra / MongoDB : framework de développement d’applica-
tion utilisant le modèle Map Reduce.
I Data Flow / Pig / Hive ... : logiciel et langage d’analyse de données per-
mettant d’utiliser Hadoop.
Minyar Sassi Hidri Technologies pour le Big Data 16 / 227
Problématique et termes clés
1 Big Data : Faits, Intérêts, Sources et Challenges
2 Qu’est-ce que le Big Data ?
Historique & contexte
Définition
Est-ce une innovation ?
Vocabulaire
3 Problématique et termes clés
4 Forces majeurs
5 Importance et défis du Big Data
6 Big Data et décisionnel
7 Approche traditionnelle versus approche Big Data
Approche traditionnelle
Approche Big Data
Fusion de deux approches
8 Mise en place du Big Data : des chantiers de grande ampleur
9 Enjeux stratégiques
Big Data : pour qui, pour quoi ?
Impacts du Big Data dans l’entreprise
10 Enjeux technologiques
Minyar Sassi Hidri Technologies pour le Big Data 17 / 227
Problématique et termes clés
Problématique et termes clés (1)
I Le Big Data se caractérise par la problématique des 3V (5V) :
- Volume (Volume)
- L’entreprise est submergée de volumes de données croissants de tous
types.
Variété (Variety)
- Gérer la complexité de plusieurs types de données et de schémas struc-
turés ou non structurés (texte, données de capteurs, son, vidéo, logs,
etc.).
Vitesse (Velocity)
- Parfois, les données doivent être saisies et traitées au fil de l’eau, au fur et
à mesure de leur collection par l’entreprise, pour la détection des fraudes
(on qualifie de fraude toute action destinée à tromper. La falsification et
l’adultération sont des exemples de fraude) par exemple.
Minyar Sassi Hidri Technologies pour le Big Data 18 / 227
Problématique et termes clés
Problématique et termes clés (2)
I Vous êtes confrontés à une problématique de gestion de données cor-
respondant à ces trois critères.
I Vous ne savez plus gérer ces données avec les architectures tradition-
nelles.
⇒ Vous avez une problématique de type Big Data.
I Il faut en effet penser à collecter, stocker puis analyser les données d’une
fac¸on qui ne peut plus être traitée par une approche traditionnelle pour
permettre de satisfaire au 4ème V.
⇒ la Valorisation des données.
I Objectif : Relever ce qui est important et ce qui l’est moins.
Minyar Sassi Hidri Technologies pour le Big Data 19 / 227
Problématique et termes clés
Big Data : Volume (1)
I Le prix de stockage des données a beaucoup diminué ces 30 dernières
années :
- De $100.000 / Go (1980)
- `A $0.10 / Go (2013)
- Ordre de grandeur :
- Kilobytes : KB bytes
- Megabytes : MB
- Gigabytes : GB
- Terabytes : TB (1012
) bytes
- Petabytes : PB (1015
) bytes
- Exabytes : EB (1018
) bytes
- Zettabytes : ZB (1021
) bytes
- Yottabytes : YB (1024
) bytes.
- 1 Yottabyte nécessite 250 trillion DVD.
- Grand marché de données est estimé à croître de
45% par annnée pour atteindre 25 milliards de dol-
lars cette année (2015).
- ∼ 1.8 ZB créées en 2011 ; ∼ 8 ZB en 2015 ; ∼ 35
ZB en 2020
Minyar Sassi Hidri Technologies pour le Big Data 20 / 227
Problématique et termes clés
Big Data : Volume (2)
I Les lieux de stockage fiables (comme des SAN : Storage Area Network) ou
réseaux de stockage peuvent être très coûteux :
Choisir de ne stocker que certaines données, jugées sensibles.
Perte de données, pouvant être très utiles, comme les Logs.
I Comment déterminer les données qui méritent d’être stockées ?
Transactions ? Logs ? Métier ? Utilisateur ? Capteurs ? Médicales ? Sociales ?.
⇒ Aucune donnée n’est inutile. Certaines n’ont juste pas encore servi.
I Problèmes :
- Comment stocker les données dans un endroit fiable, qui soit moins cher ?
- Comment parcourir ces données et en extraire des informations facilement et
rapidement ?
Minyar Sassi Hidri Technologies pour le Big Data 21 / 227
Problématique et termes clés
Big Data : Variété (1)
I Pour un stockage dans des bases de données ou dans des entrepôts de
données, les données doivent respecter un format prédéfini.
I La plupart des données existantes sont non-structurées ou semi-structurées
I Données sous plusieurs formats et types.
I On veut tout stocker :
Exemple : pour une discussion dans un centre d’appel, on peut la stocker sous forme
textuelle pour son contenu, comme on peut stocker l’enregistrement en entier, pour
interpréter le ton de voix du client.
I Certaines données peuvent paraître obsolètes, mais sont utiles pour
certaines décisions :
Exemple : Pour le transport de marchandise, on a tendance à choisir le camion le plus
proche. Mais parfois, ce n’est pas la meilleure solution. D’autres problèmes peuvent
intervenir.
Besoin de : Données GPS, plan de livraison du camion, circulation, chargement du
camion, Niveau d’essence...
Minyar Sassi Hidri Technologies pour le Big Data 22 / 227
Problématique et termes clés
Big Data : Variété (2)
Données structurées versus Données non structurées
I Données structurées : Données que l’on peut clairement codifier et identifier.
I Les données d’un tableur sont typiquement des données structurées.
I On peut comprendre leurs significations en croisant les titres de la ligne et colonne dans
laquelle se trouent les données.
⇒ Les systèmes d’analyse algorithmique ont depuis toujours été développés pour traiter ce
type de données.
I Données non structurées :
Données qui ne répondent
pas à un codage qui per-
met d’en tirer de l’infor-
mation.
I C’est en analysant les
contenus des messages
que l’on déduit l’informa-
tion : fichiers texte, au-
dio, vidéo, etc. que l’on
peut clairement codifier et
identifier.
Minyar Sassi Hidri Technologies pour le Big Data 23 / 227
Problématique et termes clés
Big Data : Vélocité
I Rapidité d’arrivée des données.
I Vitesse de traitement.
I Les données doivent être stockées a l’arrivée, parfois même des Tera-
octets par jour
Sinon, risque de perte d’informations.
I Exemple :
Il ne suffit pas de savoir quel article un client a acheté ou réservé.
Si on sait que vous avez passé plus de 5mn à consulter un article dans une boutique
d’achat en ligne, il est possible de vous envoyer un email dès que cet article est soldé.
Minyar Sassi Hidri Technologies pour le Big Data 24 / 227
Problématique et termes clés
Big Data : Le 4ème V - La Véracité
I On peut classifier les données traitées sous le chapeau du Big Data en
deux principaux types :
+ Données des entreprises : elles comportent les emails, les documents, les bases de
données, toutes les historiques des processus métiers (Logs)
+ Données en dehors des entreprises : elles englobent les bases de données externes
(publiques ou fournisseurs de données) contenues et échangées via les réseaux sociaux
, en ligne, les historiques de navigation et de recherche, les données transmises par
les objets connectés, etc.
⇒ Véracité : ou qualité de données s’introduit.
Données doivent être nettoyées, essuyées et mises en cohérence avant de pou-
voir être analysées et croisées avec les données internes.
La qualité des données dépend de deux facteurs :
- Données peuvent être inexactes, incomplètes ou structurées d’une ma-
nière qui les rendent difficile à analyser.
⇒ Il devient indispensable de vérifier la crédibilité de la source et la
qualité du contenu préalablement.
- Il n’est pas toujours facile d’anticiper quelles sont les données qui seront
utiles à l’entreprise.
⇒ Bien étudier et définir le besoin réel pour ne pas dépenser ses res-
sources à l’analyse de données qui peuvent être inutiles.
Minyar Sassi Hidri Technologies pour le Big Data 25 / 227
Problématique et termes clés
Big Data : Le 4ème V - La Véracité
Source : IBM
Minyar Sassi Hidri Technologies pour le Big Data 26 / 227
Problématique et termes clés
Big Data : Le 5ème V - La Visualisation (Valeur) (1)
I Le Big Data, ce n’est pas simplement des volumes de données considérables échangés,
mais aussi une variété de contenus, de formats et de sources infinies, ainsi qu’une véritable
problématique de maîtrise de la vitesse de création et de mise à jour des données.
I Enfin, et pas des moindres, la Big Data met en opposition deux nécessités a priori contra-
dictoires :
- Celle de rationaliser et rendre accessibles des données qui se comptent pourtant
en millions, milliards...C’est là qu’intervient le besoin d’une visualisation de
données optimale et adaptée à une exploitation très opérationnelle de cette
Big Data, avec trois objectifs finaux : Créer de la valeur, découvrir des insights
différenciants, innover...le tout à un coût modéré !
Minyar Sassi Hidri Technologies pour le Big Data 27 / 227
Forces majeurs
1 Big Data : Faits, Intérêts, Sources et Challenges
2 Qu’est-ce que le Big Data ?
Historique & contexte
Définition
Est-ce une innovation ?
Vocabulaire
3 Problématique et termes clés
4 Forces majeurs
5 Importance et défis du Big Data
6 Big Data et décisionnel
7 Approche traditionnelle versus approche Big Data
Approche traditionnelle
Approche Big Data
Fusion de deux approches
8 Mise en place du Big Data : des chantiers de grande ampleur
9 Enjeux stratégiques
Big Data : pour qui, pour quoi ?
Impacts du Big Data dans l’entreprise
10 Enjeux technologiques
Minyar Sassi Hidri Technologies pour le Big Data 28 / 227
Forces majeurs
Forces majeurs
D’une manière générale, on identifie cinq forces majeures à l’origine de
l’accélération et l’augmentation du mouvement Big Data à savoir :
La révolution du stockage grâce au Cloud.
L’avènement d’une nouvelle science des données : les Analytics avancés.
Les nouvelles possibilités de monétisation.
L’automatisation des échanges de données et les objets connectés.
Les progrès de la visualisation de données.
Minyar Sassi Hidri Technologies pour le Big Data 29 / 227
Forces majeurs Révolution de stockage
Forces majeurs
Révolution de stockage
I Massification des échanges de données + Augmentation des types de contenus
⇒ Dépassement des possibilités de stockage des entrepôts de données des
entreprises (SQL et MySQL pour les BDR).
I Année 2000 : ruptures importantes se sont produites sur le volet stockage de
l’information grâce à l’Internet :
Proposer aux entreprises et aux particuliers des espaces de stockage flexibles dans les
nuages ou Cloud à des prix très compétitifs (Google, Amazon, etc.) ;
Espaces accessibles à travers des interfaces en ligne (Google App Engine, etc.).
Développement d’une nouvelle philosophie de stockage intelligent de données, sous
le vocable NoSQL, permettant des requêtes plus rapides et plus flexibles.
⇒ Grâce aux progrès technologique du Cloud et du NoSQL, le stockage et l’exploration du
Big Data devient une opportunité plutôt qu’un obstacle pour les entreprises.
Minyar Sassi Hidri Technologies pour le Big Data 30 / 227
Forces majeurs Avènement d’une nouvelle science des données
Forces majeurs
Avènement d’une nouvelle science des données
I La révolution du Big Data va de pair avec l’emergence d’une nouvelle science
des données.
I D’après Eric Moulines :
La valorisation des immenses volumes de données hétérogènes passe la mise
en œuvre d’analyses sophistiquées, un véritable passage à l’échelle dans la
conception des modèles d’analyse et la mise en œuvre des algorithmes.
I Analytics avancés :
Statistiques non-paramétriques : Le modèle n’est pas décrit par un nombre fini de
paramètres (http ://cmatias.perso.math.cnrs.fr/Docs/cours stat np ensiie.pdf).
Règles d’association.
Réduction de dimension : ACP, ACM, AFC, etc..
Classification non supervisée (ou clustering) : k-moyennes, CMF, etc..
Algorithmes génétiques.
Minyar Sassi Hidri Technologies pour le Big Data 31 / 227
Forces majeurs Automatisation des échanges de données et les objets connectés
Forces majeurs
Automatisation des échanges de données et les objets connectés
I D’après Jean Franc¸ois Marcotorchino, Vice-Président et Directeur scientifique
de Thales France :
Le transfert extrêmement massif d’informations multimodales (vidéos, images,
sons, localisation en plus du texte et des données structurées) via les smart-
phones, les appareils connectés, les réseaux sociaux, mais aussi les opérateurs
de e-commerce sont des facteurs fondamentaux à l’origines des problématiques
Big Data..
I Exemple :
- Chaque fois qu’on visite un site, qu’on clique sur un lien, depuis un ordinateur ou
un smartphone, le comportement de l’utilisateur sur le site est automatiquement
enregistré et analysé pour déterminer son profil, ses intentions d’achat et ses goûts.
- Chaque étape du parcours de l’utilisateur peut être analysée pour comprendre les
facteurs qui ont influencé sa décision d’achat et les critères qui lui sont indifférents.
- De la même fac¸on, son décodeur TV analyse et transmet en temps réel des informa-
tions sur ses comportements devant la télévision, connaˆıtre ce qu’il regarde, s’il zappe
dès le début des publicités, s’il regarde plus souvent la télévision seul ou à plusieurs,
etc.
Minyar Sassi Hidri Technologies pour le Big Data 32 / 227
Forces majeurs Progrès de la visualisation de données
Forces majeurs
Progrès de la visualisation de données
I Les utilisateurs / décideurs doivent pouvoir visualiser et comprendre les résultats.
I Le Reporting version Big Data doit être conc¸u pour pouvoir trouver une aiguille dans une
botte de foin.
⇒ On parle de data vizualisation.
I Exemple : Tableur, Qlikview, Gephi, etc.
Minyar Sassi Hidri Technologies pour le Big Data 33 / 227
Importance et défis du Big Data
1 Big Data : Faits, Intérêts, Sources et Challenges
2 Qu’est-ce que le Big Data ?
Historique & contexte
Définition
Est-ce une innovation ?
Vocabulaire
3 Problématique et termes clés
4 Forces majeurs
5 Importance et défis du Big Data
6 Big Data et décisionnel
7 Approche traditionnelle versus approche Big Data
Approche traditionnelle
Approche Big Data
Fusion de deux approches
8 Mise en place du Big Data : des chantiers de grande ampleur
9 Enjeux stratégiques
Big Data : pour qui, pour quoi ?
Impacts du Big Data dans l’entreprise
10 Enjeux technologiques
Minyar Sassi Hidri Technologies pour le Big Data 34 / 227
Importance et défis du Big Data Importance du Big Data
Importance du Big Data
I Dans la technologie de l’information : améliorer la sécurité, diagnostiquer les anomalies et
le dépannage en analysant les structures dans les logs existants.
I Au service chargé de la clientèle : en utilisant des informations des centres d’appels afin
d’obtenir les modèles de clientèle et donc d’améliorer la satisfaction du client par la per-
sonnalisation des services.
I Dans l’amélioration des services et des produits : à travers l’utilisation du contenu des médias
sociaux. En connaissant les préférences des clients potentiels, l’entreprise peut modifier son
produit afin de répondre à une plus large gamme de personnes.
I Dans la détection de la fraude : dans les transactions en ligne pour toute type d’industrie.
I Dans l’évaluation des risques en analysant les informations provenant des transactions sur
le marché financier.
Minyar Sassi Hidri Technologies pour le Big Data 35 / 227
Importance et défis du Big Data Défis du Big Data
Défis du Big Data
I Afin de déterminer la meilleure stratégie pour une entreprise, il est essentiel que les données
qu’on compte sur soient correctement analysées.
I Le laps de temps de cette analyse est important parce que certaines d’entre elles doivent
être effectuées fréquemment afin de déterminer rapidement tout changement dans l’envi-
ronnement des affaires.
I Nouvelles technologies ⇒ problème organisationnel.
I La nécessité des spécialistes de l’informatique : pour qu’une entreprise prend l’initiative
du Big Data, elle doit soit engager des experts ou former les employés existants dans ce
nouveau domaine.
I La confidentialité et la sécurité : Comme le Big Data englobe une grande quantité de
données complexes, il est très difficile pour une entreprise de trier ces données selon des
niveaux privés et d’appliquer la sécurité adéquate. En outre, la plupart des entreprises
aujourd’hui font des affaires à travers des pays et continents et les différences entre les
lois privées sont considérables et doivent être pris en considération lors du démarrage de
l’initiative Big Data.
Minyar Sassi Hidri Technologies pour le Big Data 36 / 227
Big Data et décisionnel
Plan
1 Big Data : Faits, Intérêts, Sources et Challenges
2 Qu’est-ce que le Big Data ?
Historique & contexte
Définition
Est-ce une innovation ?
Vocabulaire
3 Problématique et termes clés
4 Forces majeurs
5 Importance et défis du Big Data
6 Big Data et décisionnel
7 Approche traditionnelle versus approche Big Data
Approche traditionnelle
Approche Big Data
Fusion de deux approches
8 Mise en place du Big Data : des chantiers de grande ampleur
9 Enjeux stratégiques
Big Data : pour qui, pour quoi ?
Impacts du Big Data dans l’entreprise
10 Enjeux technologiques
Minyar Sassi Hidri Technologies pour le Big Data 37 / 227
Big Data et décisionnel
Big Data et décisionnel
I Le modèle OLAP, ou traitement analytique en ligne, est considéré l’ancêtre du Big Data.
I Il s’agit de volumes importants de données historiques qui représentent toutes les données
de l’entreprise, et qui sont requˆetées afin d’obtenir des informations agrégées et statistiques
de l’activité de l’entreprise (décisionnel, ou Business Intelligence), ou pour extraire des
informations nouvelles de ces données existantes à l’aide d’algorithmes de traitement des
données (Data Mining).
I Mais...
- Modélisation des données prélimi-
naires : Fait et Dimensions.
- Structuration de données / à des be-
soins spécifiques.
- Application à une analyse multi-
dimensionnelle des données, mais
pas pour fouille de données ou ap-
prentissage automatique.
Minyar Sassi Hidri Technologies pour le Big Data 38 / 227
Approche traditionnelle versus approche Big Data
1 Big Data : Faits, Intérêts, Sources et Challenges
2 Qu’est-ce que le Big Data ?
Historique & contexte
Définition
Est-ce une innovation ?
Vocabulaire
3 Problématique et termes clés
4 Forces majeurs
5 Importance et défis du Big Data
6 Big Data et décisionnel
7 Approche traditionnelle versus approche Big Data
Approche traditionnelle
Approche Big Data
Fusion de deux approches
8 Mise en place du Big Data : des chantiers de grande ampleur
9 Enjeux stratégiques
Big Data : pour qui, pour quoi ?
Impacts du Big Data dans l’entreprise
10 Enjeux technologiques
Minyar Sassi Hidri Technologies pour le Big Data 39 / 227
Approche traditionnelle versus approche Big Data Approche traditionnelle
Approche Traditionnelle
Analyse structurée et répétée
I Les besoins métiers guident la conception de la solution.
I Appropriée pour les données structurées.
I Les opérations et les processus répétitifs, les sources relativement stables et les besoins sont
bien compris et cadrés.
Minyar Sassi Hidri Technologies pour le Big Data 40 / 227
Approche traditionnelle versus approche Big Data Approche Big Data
Approche Big Data (1)
Analyse itérative et exploratoire
I Les sources d’information guident la découverte créative.
Minyar Sassi Hidri Technologies pour le Big Data 41 / 227
Approche traditionnelle versus approche Big Data Fusion de deux approches
Fusionner l’approche Big Data avec l’approche
Traditionnelle
I La question n’est pas :
- Dois-je choisir entre l’approche classique et l’approche Big Data ?
I Mais plutôt :
- Comment les faire fonctionner ensemble ?
Approche Traditionnelle Approche Big Data
Analyse structurée et répétée Analyse itérative et exploratoire
Minyar Sassi Hidri Technologies pour le Big Data 42 / 227
Mise en place du Big Data : des chantiers de grande ampleur
1 Big Data : Faits, Intérêts, Sources et Challenges
2 Qu’est-ce que le Big Data ?
Historique & contexte
Définition
Est-ce une innovation ?
Vocabulaire
3 Problématique et termes clés
4 Forces majeurs
5 Importance et défis du Big Data
6 Big Data et décisionnel
7 Approche traditionnelle versus approche Big Data
Approche traditionnelle
Approche Big Data
Fusion de deux approches
8 Mise en place du Big Data : des chantiers de grande ampleur
9 Enjeux stratégiques
Big Data : pour qui, pour quoi ?
Impacts du Big Data dans l’entreprise
10 Enjeux technologiques
Minyar Sassi Hidri Technologies pour le Big Data 43 / 227
Mise en place du Big Data : des chantiers de grande ampleur
Mise en place d’un projet Big Data
I Choisir d’investir dans le Big Data est un premier pas, encore faut-il que les besoins métier
soient identifiés en amont.
I Deux étapes : Instruction & Conception
- Instruction : Essentielle à chaque projet et prend tout son poids dans ce type de chantiers.
Minyar Sassi Hidri Technologies pour le Big Data 44 / 227
Mise en place du Big Data : des chantiers de grande ampleur
Méthodologie
Une approche progressive et itérative
I Dans ce type de projets, le modèle clas-
sique du cycle en V est déconseillé.
I Il faut au contraire construire la solution
progressivement, en prévoyant quelques
itérations comprenant des interactions
avec les futurs utilisateurs.
I Données sont au cœur des attentes ⇒ Un
dialogue permanent avec les utilisateurs
des données doit être établi.
I Les méthodes incrémentales sont donc adaptées à ce type de projet :
- Il s’agit de diviser le projet en incréments, c’est-à-dire en parties fonctionnelles cohé-
rentes.
- Chaque incrément pouvant être testé séparément et faisant l’objet de plusieurs itéra-
tions.
- L’objectif est d’impliquer les utilisateurs dans le développement, la fourniture des
exigences et l’évaluation des itérations.
Minyar Sassi Hidri Technologies pour le Big Data 45 / 227
Enjeux stratégiques
1 Big Data : Faits, Intérêts, Sources et Challenges
2 Qu’est-ce que le Big Data ?
Historique & contexte
Définition
Est-ce une innovation ?
Vocabulaire
3 Problématique et termes clés
4 Forces majeurs
5 Importance et défis du Big Data
6 Big Data et décisionnel
7 Approche traditionnelle versus approche Big Data
Approche traditionnelle
Approche Big Data
Fusion de deux approches
8 Mise en place du Big Data : des chantiers de grande ampleur
9 Enjeux stratégiques
Big Data : pour qui, pour quoi ?
Impacts du Big Data dans l’entreprise
10 Enjeux technologiques
Minyar Sassi Hidri Technologies pour le Big Data 46 / 227
Enjeux stratégiques Big Data : pour qui, pour quoi ?
Big Data : pour qui, pour quoi ?
Des arômes et ingrédients qui se déclinent dans tous les secteurs d’activité
Minyar Sassi Hidri Technologies pour le Big Data 47 / 227
Enjeux stratégiques Impacts du Big Data dans l’entreprise
Impacts du Big Data dans l’entreprise (1)
I La Big Data impacte l’ensemble de l’entreprise et permet de remettre
le client au cœur de la stratégie :
Tous les départements sont concernés par l’exploitation du Big Data : Marketing,
Communication, Digital, RH, ´Etudes, Commercial, Finances, Innovation, Direction
Générale...
Finie la démarche Top Down où la Marque pousse sa stratégie vers le consommateur,
en espérant que celle ci cadre avec les attentes de ses cibles. La Big Data permet,
via l’analyse data, de se défaire de cette angoisse puisqu’elle remet le consommateur
au cœur de la stratégie de l’entreprise.
Ainsi, le comportement du consommateur, ses centres d’intérêt et ses prises de parole
libres générés à grande échelle sont agrégés et analysés afin de créer ce fameux cadre
stratégique, qui devient par définition totalement ajusté aux besoins et attentes des
clients, et permet à la Marque d’alimenter toutes les directions de l’entreprise de
fac¸on innovante et performante.
Minyar Sassi Hidri Technologies pour le Big Data 48 / 227
Enjeux stratégiques Impacts du Big Data dans l’entreprise
Impacts du Big Data dans l’entreprise (2)
Minyar Sassi Hidri Technologies pour le Big Data 49 / 227
Enjeux stratégiques Impacts du Big Data dans l’entreprise
Impacts du Big Data dans l’entreprise (3)
I L’emergence de nouveaux metiers capables de gérer vos données d’In-
ternet et d’en extraire les bonnes informations :
Architecte Big Data :
- Connaissance infrastructures et logiciels Big Data.
Connaissances en modélisations.
Data Analyst
- Connaissance des logiciels & langages Big Data.
Connaissance en modélisations.
Data Scientist :
- Connaissance des logiciels & langages Big Data.
Connaissance en modélisations.
Connaissances metiers.
Chief-Data-Officer (Directeur des données) :
- Responsable des données et de leur gouvernance (collecte, traitement,
sauvegarde, accès).
Responsable de l’analyse des données et aide à la decision.
⇒ Mettre en œuvre des équipes agiles & transverses.
Minyar Sassi Hidri Technologies pour le Big Data 50 / 227
Enjeux technologiques
1 Big Data : Faits, Intérêts, Sources et Challenges
2 Qu’est-ce que le Big Data ?
Historique & contexte
Définition
Est-ce une innovation ?
Vocabulaire
3 Problématique et termes clés
4 Forces majeurs
5 Importance et défis du Big Data
6 Big Data et décisionnel
7 Approche traditionnelle versus approche Big Data
Approche traditionnelle
Approche Big Data
Fusion de deux approches
8 Mise en place du Big Data : des chantiers de grande ampleur
9 Enjeux stratégiques
Big Data : pour qui, pour quoi ?
Impacts du Big Data dans l’entreprise
10 Enjeux technologiques
Minyar Sassi Hidri Technologies pour le Big Data 51 / 227
Enjeux technologiques
Enjeux technologiques
Types d’outils utilisés dans le Big Data
I Où le traitement est hébergé ?
Serveurs distribués / Cloud (exemple Amazon EC2)
I Où les données sont stockées ?
Stockage distribué (exemple Amazon S3)
I Quel modèle de programmation ?
Traitement réparti (exemple MapReduce)
I Comment les données sont stockées et indexées ?
Bases de données à haute performance sans schéma (exemples MongoDB,
Cassandra)
I Quelles opérations sont effectuées sur des données ?
Analytique
Minyar Sassi Hidri Technologies pour le Big Data 52 / 227
Chapitre 2 - Hadoop, MapReduce et le Big
Data
1 Hadoop : Un standard de gestion des données et applications distribuées
2 HDFS : Hadoop Distributed File System
3 MapReduce
Minyar Sassi Hidri Technologies pour le Big Data 53 / 227
Objectifs
I Découvrir diverses solutions complémentaires liées à Hadoop.
I Apprendre à installer et à utiliser Hadoop.
I Découvrir le paradigme de programmation parallèle MapReduce.
Minyar Sassi Hidri Technologies pour le Big Data 54 / 227
Hadoop
1 Hadoop : Un standard de gestion des données et applications distribuées
Problématiques du calcul distribué
La solution : Apache Hadoop
L’écosystème Hodoop
2 HDFS : Hadoop Distributed File System
Présentation
Architecture
´Ecriture / Lecture d’un fichier
3 MapReduce
Présentation
Modèle de programmation
Exemples
Minyar Sassi Hidri Technologies pour le Big Data 55 / 227
Hadoop Problématiques du calcul distribué
Problématiques du calcul distribué (1)
I Calcul distribué : exécution d’un traitement informatique sur une mul-
titude de machines différentes (un cluster de machines) de manière
transparente.
I Problématiques :
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 archi-
tectures.
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.
Minyar Sassi Hidri Technologies pour le Big Data 56 / 227
Hadoop Problématiques du calcul distribué
Problématiques du calcul distribué (2)
I Ces problématiques sont complexes et ont donné lieu à des années de
recherche et d’expérimentation.
I On distingue historiquement deux approches/cas d’usage :
[1] Effectuer des calculs intensifs localement (recherche scientifique) - on
souhaite avoir un cluster de machines local pour accélérer le traitement.
⇒ Solution qui était jusqu’ici coûteuse et complexe à mettre en œuvre.
[2] Exploiter la démocratisation de l’informatique moderne et la bonne
volonté des utilisateurs du réseau pour créer un cluster distribué via
Internet à moindre coût.
⇒ Solution qui suppose qu’on trouve des volontaires susceptibles de
partager leur puissance de calcul.
Minyar Sassi Hidri Technologies pour le Big Data 57 / 227
Hadoop Problématiques du calcul distribué
Problématiques du calcul distribué (3)
I De nombreuses universités et entreprises ont des besoins d’exécution
locale de tâches parallélisables sur des données massives.
I Les solutions qui étaient disponibles jusqu’ici :
[1] Des super calculateurs classiques comme Blue Gene : très oné-
reux, souvent trop puissants par rapport aux besoins requis, réservés
aux grands groupes industriels.
[2] Des solutions développées en interne : investissement initial très
conséquent, nécessite des compétences et une rigueur coûteuses.
[3] Architecture Beowulf : un début de réponse, mais complexe à mettre
en œuvre pour beaucoup d’entreprises ou petites universités, et nécessi-
tant aussi un investissement initial assez conséquent.
Minyar Sassi Hidri Technologies pour le Big Data 58 / 227
Hadoop Problématiques du calcul distribué
Problématiques du calcul distribué (4)
I Le problème qui se posait jusqu’ici pour ce cas d’usage :
Avoir un framework déjà disponible, facile à déployer, et qui permette
l’exécution de tâches parallélisables - et le support et le suivi de ces
tâches - de manière rapide et simple à mettre en œuvre.
L’idée étant d’avoir un outil off the shelf qui puisse être installé et
configuré rapidement au sein d’une entreprise/d’une université et qui
permet à des développeurs d’exécuter des tâches distribuées avec un
minimum de formation requise.
L’outil en question devant être facile à déployer, simple à supporter, et
pouvant permettre la création de clusters de tailles variables extensibles
à tout moment.
Minyar Sassi Hidri Technologies pour le Big Data 59 / 227
Hadoop La solution : Apache Hadoop
La solution Apache Hadoop
Avantages
Projet de la fondation Apache - Open Source, composants complètement
ouverts, tout le monde peut participer.
Modèle simple pour les développeurs : il suffit de développer des tâches Ma-
pReduce depuis des interfaces simples accessibles via des librairies dans des
langages multiples (Java, Python, C/C++, Rubby, R, etc.).
Déployable très facilement (paquets Linux pré-configurés), configuration très
simple elle aussi.
S’occupe de toutes les problématiques liées au calcul distribué, comme l’accès
et le partage des données, la tolérance aux pannes, ou encore la répartition
des tâches aux machines membres du cluster.
⇒ Le programmeur a simplement à s’occuper du développement logiciel pour
l’exécution de la tâche.
Minyar Sassi Hidri Technologies pour le Big Data 60 / 227
Hadoop La solution : Apache Hadoop
Historique
2002 : Doug Cutting (directeur archive.org) et Mike Cafarella (étudiant) développent
Nutch, un moteur de recherche Open Source exploitant le calcul distribué.
L’implémentation peut tourner seulement sur quelques machines et a de multiples pro-
blèmes, notamment en ce qui concerne l’accès et le partage de fichiers.
2003/2004 : Le département de recherche de Google publie deux whitepapers, le premier
sur GFS (un système de fichier distribué) et le second sur le paradigme MapReduce pour le
calcul distribué.
2004 : Doug Cutting et Mike Cafarella développent un framework (encore assez primitif)
inspiré des papers de Google et portent leur projet Nutch sur ce framework.
2006 : Doug Cutting, chez Yahoo, est en charge d’améliorer l’indexation du moteur de
recherche de Yahoo. Il exploite le framework réalisé précédemment et créé une nouvelle
version améliorée du framework en tant que projet Open Source de la fondation Apache,
qu’il nomme Hadoop (le nom d’un éléphant en peluche de son fils).
- `A l’époque, Hadoop est encore largement en développement - un cluster pouvait alors comporter au maximum 5
à 20 machines, etc.
.
2008 : Le développement est maintenant très abouti, et Hadoop est exploité par le moteur
de recherche de Yahoo ainsi que par de nombreuses autres divisions de l’entreprise.
2011 : Hadoop est désormais utilisé par de nombreuses autres entreprises et des universités,
et le cluster Yahoo comporte 42000 machines et des centaines de Petaoctets d’espace de
stockage.
2015 : Hadoop se généralise notamment avec le buzz BigData et Cloud...
Minyar Sassi Hidri Technologies pour le Big Data 61 / 227
Hadoop La solution : Apache Hadoop
Qui utilise Hadoop ?
...et des centaines d’entreprises et universités à travers le monde.
Minyar Sassi Hidri Technologies pour le Big Data 62 / 227
Hadoop La solution : Apache Hadoop
Apache Hadoop : Une technologie en plein essort
I De plus en plus de données produites par des SI deviennent très nombreuses. Ces données
doivent toutes être analysées, corrélées, etc.
I Hadoop offre une solution idéale et facile à implémenter au problème.
Le projet Hadoop consiste en deux grandes parties :
- Stockage des données : HDFS (Hadoop Distributed File System).
- Traitement des données : MapReduce.
Principe :
- Diviser les données.
- Les sauvegarder sur une collection de machines, appelées cluster.
- Traiter les données directement là où elles sont stockées, plutôt que de les copier à partir d’un serveur
distribué.
Note : Il est possible d’ajouter des machines à votre cluster, au fur et à mesure que les données
augmentent.
I Le domaine de recherche/industriel autour de la gestion et de l’analyse de ces données - et
de Hadoop et les technologies associées - est communément désigné sous l’expression Big
Data.
I 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.
IDC : International Data Corporation - une entreprise américaine spécialisée dans la réalisation d’études de marché dans
les domaines des technologies de l’information et de la communication et de l’électronique grand public.
Minyar Sassi Hidri Technologies pour le Big Data 63 / 227
Hadoop L’écosystème Hodoop
Hadoop : Système d’exploitation de la donnée
Vue d’ensemble
I HDFS : Système de fichiers distri-
bué.
I MapReduce : Framework de trai-
tement parallélisé.
I HBase
Système de gestion de base de données non-relationnelles distribué de type orientée colonnes.
I Pig : Requêtage des données Hadoop à partir d’un langage de script.
I Hive : Requêtage de type SQL.
Et la gestion des transactions ? ? ? ? ?
Déjà dans toutes les têtes surtout celle de Doug Cutting (le père de Hadoop) ! !
Minyar Sassi Hidri Technologies pour le Big Data 64 / 227
Hadoop L’écosystème Hodoop
Collecte et integration de données
I Sqoop
Outils permettant de transférer des données en masse entre Hadoop et un entrepôt
de données structuré tel qu’une BD.
I Flume
Flume est un service distribué, fiable et hautement disponible servant à la collecte,
l’agrégation et le déplacement d’une grosse quantité de données de logs.
I Kafka (messaging)
Système orienté message de type publish/subscribe implémenté comme système de
traces transactionnel distribué, adapté pour la consommation de messages en-ligne
et hors ligne.
Minyar Sassi Hidri Technologies pour le Big Data 65 / 227
Hadoop L’écosystème Hodoop
Batch Processing
I Hive
Permet l’exécution de requêtes SQL sur un cluster Hadoop en vue d’analyser et
d’agréger les données.
Langage de visualisation uniquement.
Offre les connecteurs ODBC/JDBC.
I Pig
Permet le requêtage des données Hadoop à partir d’un langage de script.
Basé sur un langage de haut niveau permettant de créer des programmes de type
MapReduce.
I Cascading
API de traitement de données et planificateur de requêtes pour la définition, le partage
et le traitement de données.
I Spark
Moteur d’analyse multi-fonctions adapté au traitement rapide de gros volumes de
données.
Concurrent de MapReduce.
Minyar Sassi Hidri Technologies pour le Big Data 66 / 227
Hadoop L’écosystème Hodoop
Analytic SQL
I Drill
Système distribué permettant d’effectuer des requêtes sur de larges données permet-
tant l’analyse interactive des données en SQL.
Permet de requêter des sources de données hétérogènes : MongoDB, JSON, HDFS,
Hive, Classpath, HBase.
Offre le connecteur ODBC.
I Impala
Système distribué permettant d’effectuer des requêtes sur de larges données permet-
tant l’analyse interactive des données en SQL.
Permet de requêter des sources de données hétérogènes : HDFS, HBase.
Compatible avec Hive.
I Spark SQL
Module de Spark offrant une API de plus haut niveau avec une syntaxe SQL.
´Equivalent à Hive mais s’exécutant sur Spark.
Offre le connecteur JDBC.
Minyar Sassi Hidri Technologies pour le Big Data 67 / 227
Hadoop L’écosystème Hodoop
Stream processing
I Storm
Système de calcul distribué temps réel.
I Spark Streaming
Module de Spark permettant de traiter des flux de données qui arrivent en continu,
et donc de traiter ces données au fur et à mesure de leur arrivée.
I Spring XD
Basé sur Spring Integration, Spring Batch et Spring Data.
I Samza
Framework permettant de traiter de manière distribué des flux.
Utilise Kafka, Yarn.
Minyar Sassi Hidri Technologies pour le Big Data 68 / 227
Hadoop L’écosystème Hodoop
Machine Learning (apprentissage automatique)
I Mahout
Vise à créer des implémentations d’algorithmes d’apprentissage automa-
tiques et de Data Mining.
Même si les principaux algorithmes d’apprentissage se basent sur Ma-
pReduce, il n’y a pas d’obligation à utiliser Hadoop.
I Spark ML
Librairie Spark de machine learning fournissant les algorithmes de clas-
sique :
- Classification.
- Regression.
- Clustering.
- Filtrage collaborative.
- Réduction de la dimension.
- ...
Minyar Sassi Hidri Technologies pour le Big Data 69 / 227
Hadoop L’écosystème Hodoop
Search Engine
I SolR
VSolR offre une indexation distribuée et répliquée basée sur Apache Lu-
cene.
Permet la recherche full text, le highlighting, le facetting et la recherche
géospatiale.
Permet l’indexation de documents riches.
I Elastic
Elastic offre une indexation distribuée et répliquée basée sur Apache
Lucene.
Permet la recherche full text, le highlighting, le facetting et la recherche
géospatiale.
Permet l’indexation de documents riches.
Minyar Sassi Hidri Technologies pour le Big Data 70 / 227
Hadoop L’écosystème Hodoop
Les distributions
Pourquoi des distributions ?
I Pour regrouper de fac¸on homogène les différentes extensions.
I Pour faciliter l’installation, la diffusion et le support.
I Pour permettre d’incuber des Business Model pour les éditeurs qui
contribuent largement à Hadoop.
I 3 acteurs majeurs dans l’écosystème :
HortonWorks.
Cloudera.
MapR.
I Comment choisir une solution Hadoop ?
Modèle économique (Open Source, Commercial..).
Les composants.
Maturité de la solution, le support, la documentation, le retour d’experiences.
Le rapport avec Hadoop, la rapidité des evolutions.
Partenariats (hébergeurs...), compatibilité avec les produits satellites.
Minyar Sassi Hidri Technologies pour le Big Data 71 / 227
HDFS : Hadoop Distributed File System
1 Hadoop : Un standard de gestion des données et applications distribuées
Problématiques du calcul distribué
La solution : Apache Hadoop
L’écosystème Hodoop
2 HDFS : Hadoop Distributed File System
Présentation
Architecture
´Ecriture / Lecture d’un fichier
3 MapReduce
Présentation
Modèle de programmation
Exemples
Minyar Sassi Hidri Technologies pour le Big Data 72 / 227
HDFS : Hadoop Distributed File System Présentation
HDFS : Présentation
I Pour stocker les données en entrée de nos tâches Hadoop, ainsi que les résul-
tats de nos traitements, on va utiliser HDFS : Hadoop Distributed FileSystem.
I HDFS est inspiré de GFS, un système de fichiers distribué conc¸u par Google.
I L’implémentation de HDFS a son origine dans un whitepaper issu du dépar-
tement de recherche de Google (The Google File System, 2003)
I 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, mais :
Systèmes de fichiers : les données sont écrites dans des blocs gérés par le FileSystem.
HDFS : les données sont écrites dans des blocs gérés par le HDFS, qu’il est évidem-
ment distribué.
I Permet :
La réplication (les blocs sont répliqués).
La scalabilité (les blocs ne sont pas tous sur la même machine).
Le stockage des données structurées ou non sur un ensemble de serveurs distribués.
Minyar Sassi Hidri Technologies pour le Big Data 73 / 227
HDFS : Hadoop Distributed File System Architecture
HDFS : Architecture (1)
I Node (Master/Slave) : dans
une architecture Hadoop,
chaque membre pouvant traiter
des données est appelé Node
(Nœud).
I Un seul d’entre eux peut être
Master même s’il peut changer
au cours de la vie du cluster, il
s’agit du NameNode (NN). Il est
responsable de la localisation des
données dans le cluster.
I Les autres nœuds, stockant les données, sont des slaves appelés DataNode
(DN).
I Le NN est donc un point unique de défaillance (Single Point Of Failure
(SPOF)) dans un cluster Hadoop (Hadoop 2.0 introduit un basculement (fai-
lover) automatisé).
Minyar Sassi Hidri Technologies pour le Big Data 74 / 227
HDFS : Hadoop Distributed File System Architecture
HDFS : Architecture (2)
I NN : stocke les informations relatives aux noms de fichiers. C’est ce serveur qui, par exemple,
va savoir qu’un fichier dans le répertoire Data Input, créé par le programmeur, comporte
58 blocs de données, et qui sait où ils se trouvent. Il y a un seul NN dans tout le cluster
Hadoop.
I DN : stocke les blocs de données eux-mêmes. Il y a un DN pour chaque machine au sein
du cluster, et ils sont en communication constante avec le NN pour recevoir de nouveaux
blocs, indiquer quels blocs sont contenus sur le DN, signaler des erreurs, etc...
I BlockSize : Taille unitaire de stockage (généralement 64 Mo ou 128 Mo). C’est à dire
qu’un fichier de 1 Go et une taille de block de 128 Mo sera divisé en 8 blocks.
I Replication Factor
C’est le nombre de copies d’une donnée devant être reparties sur les différents nœuds du cluster (souvent 3, c’est
à dire une primaire et deux secondaires).
I Processus de lecture HDFS :
Interrogation du NN pour localiser les adresses des nœuds hébergeant les blocs sous-
jacents les plus proches.
I Processus d’écriture
Écriture sur le DN.
DN communique ses blocs au NN.
Replication.
Minyar Sassi Hidri Technologies pour le Big Data 75 / 227
HDFS : Hadoop Distributed File System ´Ecriture / Lecture d’un fichier
´Ecriture / Lecture d’un fichier
´Ecriture Lecture
Minyar Sassi Hidri Technologies pour le Big Data 76 / 227
HDFS : Hadoop Distributed File System ´Ecriture / Lecture d’un fichier
Écriture d’un fichier
I Si on souhaite écrire un fichier au sein de
HDFS, on va utiliser la commande princi-
pale de gestion de Hadoop : $hadoop fs.
I Le programme va diviser le fichier en blocs
de 64MB (ou 128 Mo, selon la configura-
tion).
I Il va ensuite annoncer au NN.
I Le NN va alors indiquer au programme
qu’il doit stocker le bloc 1 sur le DN nu-
méro 3, et le bloc 2 sur le DN numéro 1.
I Le client Hadoop va alors contacter direc-
tement les DNs concernés et leur deman-
der de stocker les deux blocs en question.
I Par ailleurs, les DNs s’occuperont - en in-
formant le NN - de répliquer les données
entre eux pour éviter toute perte de don-
nées.
Minyar Sassi Hidri Technologies pour le Big Data 77 / 227
HDFS : Hadoop Distributed File System ´Ecriture / Lecture d’un fichier
Lecture d’un fichier
I Si on souhaite lire un fichier au sein de
HDFS, on utilise aussi le client Hadoop :
$hadoop fs.
I Le client va contacter le NN en spécifiant
le nom de fichier.
I Le NN lui répondra par exemple : Il est
composé de deux blocs. Le premier est dis-
ponible sur le DN 3 et 2, le second sur le
DN 1 et 3.
I Là aussi, le programme contactera les DNs
directement et leur demandera de lui trans-
mettre les blocs concernés. En cas d’er-
reur/non réponse d’un des DNs, il passe
au suivant dans la liste fournie par le NN.
Minyar Sassi Hidri Technologies pour le Big Data 78 / 227
HDFS : Hadoop Distributed File System ´Ecriture / Lecture d’un fichier
Dysfonctionnement ! ! !
I La gestion du stockage est assurée par les daemons Hadoop. On a pas à se
soucier d’où sont stockées les données.
I Hadoop réplique lui-même les données : les fichiers sont disponibles à tout
moment sur plusieurs DNs, et si une machine tombe en panne, on a toujours
accès aux données grâce à la replication.
I Si l’un des nœuds a un problème, les données seront perdues :
Hadoop réplique chaque bloc 3 fois.
Il choisit 3 nœuds au hasard, et place une copie du bloc dans chacun d’eux.
Si le nœud est en panne, le NN le détecte, et s’occupe de répliquer encore les blocs
qui y etaient hébergés pour avoir toujours 3 copies stockées.
I Si le NN a un problème ?
Minyar Sassi Hidri Technologies pour le Big Data 79 / 227
HDFS : Hadoop Distributed File System ´Ecriture / Lecture d’un fichier
Dysfonctionnement ! ! !
I Si c’est un problème d’accès (ré-
seau), les données sont temporaire-
ment inaccessibles.
I Si le disque du NN est défaillant,
les données seront perdues à ja-
mais ! ! ! !
I Pour éviter cela, le NN sera dupli-
qué, non seulement sur son propre
disque, mais également quelque part
sur le système de fichiers du réseau.
I Définition d’un autre NN (standby
NN) pour reprendre le travail si le
NN actif est défaillant.
Minyar Sassi Hidri Technologies pour le Big Data 80 / 227
HDFS : Hadoop Distributed File System ´Ecriture / Lecture d’un fichier
Commandes Hadoop
I Comme indiqué plus haut, la commande permettant de stocker ou extraire des fichiers de
HDFS est l’utilitaire console $hadoop avec l’option fs.
I Il réplique globalement les commandes systèmes standards Linux, et est très simple à utiliser :
$hadoop fs -mkdir /Data Input
Pour créer le répertoire /Data Input
$hadoop fs -put /home/cloudera/mydata.txt /Data Input/mydata.txt
Pour stocker le fichier mydata.txt sur HDFS dans le repertoire /Data Input.
$hadoop fs -get /Data Input/mydata.txt mydata.txt
Pour obtenir le fichier /Data Input/mydata.txt de HDFS et le stocker dans le fichier
local mydata.txt.
$hadoop fs -cat Data Input/mydata.txt
Pour afficher le contenu du fichier mydata.txt.
$hadoop fs -rm /Data Input/mydata.txt
Pour supprimer le fichier /Data Input/mydata.txt
D’autres commandes usuelles : -ls, -cp, -rmr, du, etc...
Minyar Sassi Hidri Technologies pour le Big Data 81 / 227
MapReduce
1 Hadoop : Un standard de gestion des données et applications distribuées
Problématiques du calcul distribué
La solution : Apache Hadoop
L’écosystème Hodoop
2 HDFS : Hadoop Distributed File System
Présentation
Architecture
´Ecriture / Lecture d’un fichier
3 MapReduce
Présentation
Modèle de programmation
Exemples
Minyar Sassi Hidri Technologies pour le Big Data 82 / 227
MapReduce Présentation
Présentation (1)
I Pour exécuter un problème large de manière distribuée, il faut pouvoir décou-
per le problème en plusieurs sous-problèmes de taille réduite à exécuter sur
chaque machine du cluster.
⇒ Stratégie algorithmique dite du divide and conquer / diviser pour régner.
I De multiples approches de division d’un problème en plusieurs sous-tâches
existent : Open MP, MPI, etc... ;
I MapReduce est un paradigme visant à généraliser les approches existantes
pour produire une approche unique applicable à tous les problèmes.
I MapReduce, écrit en C++ (publication issue du département de recherche
de Google publié en 2004 (MapReduce : Simplified Data Processing on Large
Clusters)).
I Un framework pour l’analyse du Big Data :
- Pour données non structurées, sans schéma, etc..
- Pour de très grands clusters.
- Des milliers de nœuds.
- Partitionnement et parallélisation automatiques.
Minyar Sassi Hidri Technologies pour le Big Data 83 / 227
MapReduce Présentation
Présentation (2)
MapReduce définit deux opérations distinctes à effectuer sur les données
d’entrée :
[1.] Map :
- Transforme les données d’entrée en une série de couples (key, value).
- Regroupe les données en les associant à des clés, choisies de telle sorte que les couples
(key, value) aient un sens par rapport au problème à résoudre.
Note : Cette opération doit être parallèlisable. On doit pouvoir découper les données
d’entrée en plusieurs fragments, et faire exécuter l’opération Map à chaque machine
du cluster sur un fragment distinct.
[2.] Reduce :
- Applique un traitement à toutes les valeurs de chacune des clés distinctes produite
par l’opération Map.
- Au terme de l’opération Reduce, on aura un résultat pour chacune des clés distinctes.
Ici, on attribuera à chacune des machines du cluster une des clés uniques produites
par Map, en lui donnant la liste des valeurs associées à la clé. Chacune des machines
effectuera alors l’opération Reduce pour cette clé.
Minyar Sassi Hidri Technologies pour le Big Data 84 / 227
MapReduce Modèle de programmation
Modèle de programmation
I Données sous forme de paires (key, value).
Ex. (doc-id, content), (word, count), etc..
I Le programmeur fournit le code de deux fonctions :
Map (key, value) → list(ikey, ivalue) : permet de faire le même traitement en
parallèle sur des données partitionnées.
Reduce(ikey, list(ivalue)) → list(ikey, fvalue) : permet d’agréger les données traitées
par Map.
I Traitement parallèle des étapes Map et Reduce :
Partitionnement des données.
Tolérance aux fautes.
Ordonnancement des accès disques : méthodes qu’un SE utilise pour décider de l’ordre
dans lequel les opérations d’E/S seront transmises aux disques.
Minyar Sassi Hidri Technologies pour le Big Data 85 / 227
MapReduce Modèle de programmation
Fonctionnement MapReduce
On distingue donc 4 étapes dans un traitement MapReduce :
1. Découper (split) les données d’en-
trée en plusieurs fragments.
2. Mapper chacun de ces fragments
pour obtenir des couples (key, va-
lue).
3. Grouper (shuffle) ces couples (key,
value) par clé (key).
4. Réduire (reduce) les groupes in-
dexés par clé en une forme finale,
avec une valeur pour chacune des
clés distinctes.
Minyar Sassi Hidri Technologies pour le Big Data 86 / 227
MapReduce Exemples
Exemple 1 : Comptage du nombre de mots
La phase Map (1)
I Il s’agit de concevoir un programme MapReduce comptant le nombre
d’occurrences des différents mots composant un fichier.
am stram gram
pic et pic et colégram
bour et bour et ratatam
am stram gram
I Un enregistrement correspond à une ligne terminée par n.
I Voici le mapper (pseudo-code) du programme WordCount :
Map (key, value) :
//key : nom de fichier ; value : contenu (d’une partie) du fichier
POUR CHAQUE word w IN value
´Emettre(w, 1)
Minyar Sassi Hidri Technologies pour le Big Data 87 / 227
MapReduce Exemples
Exemple 1 : Comptage du nombre de mots
La phase Map (2)
I Le contenu du fichier en sortie de Mapper est comme suit :
am,1
stram,1
gram,1
pic,1
et,1
pic,1
et,1
colégram,1
bour,1
et,1
bour,1
et,1
ratatam,1
am,1
stram,1
gram,1
I On notera qu’en sortie de mapper :
Les résultats, dits intermédiaires, sont aussi
stockés sous forme de (key, value).
La valeur en entrée (un mot) est devenue
une clé en sortie ;
La clé en entrée de mapper ne joue aucun
rôle dans le programme.
Minyar Sassi Hidri Technologies pour le Big Data 88 / 227
MapReduce Exemples
Exemple 1 : Comptage du nombre de mots
Entre la phase Map et la phase Reduce
I Avant d’être envoyé au reducer, le fi-
chier est automatiquement trié par clé :
c’est ce que l’on appelle la phase de
shuffle & sort.
I Le fichier en entrée du reducer est le
suivant :
am,[1,1]
bour,[1,1]
colégram,[1]
et,[1,1,1,1]
gram,[1,1]
pic,[1,1]
ratatam,[1]
stram,[1,1]
Minyar Sassi Hidri Technologies pour le Big Data 89 / 227
MapReduce Exemples
Exemple 1 : Comptage du nombre de mots
La phase Reduce
I Voici le reducer du
programme MapReduce
permettant de consolider
les résultats issus du
mapper :
1. Reduce (key, values)
//key : un mot ; values : une
liste de 1
2. r´esultat = 0
3. POUR CHAQUE value v IN
values
r´esultat+ = v ;
4. ´Emettre(key, r´esultat)
Ligne 1 : le reducer prend en entrée un enregistrement
sous la forme d’un couple (key, values) avec :
- key du type Text (c’est un mot).
- values étant une liste de valeurs du type intWri-
table.
Ligne 2 : le reducer remet à zéro le compteur r´esultat
lorsque l’on change de mot (rappelons que le change-
ment de mot correspond à un changement de clé, et
donc d’enregistrement, et qu’il est géré par Hadoop).
Ligne 3 : pour chaque valeur v dans la liste values on
ajoute v r´esultat (dans notre exemple v vaut toujours
1).
Ligne 4 : quand on change de mot, on écrit dans un
fichier en sortie le couple (key, r´esultat), r´esultat étant
le nombre d’occurrences du mot contenu dans la variable
key.
I Le fichier en sortie de reducer
sera donc le suivant :
am,2
bour,2
colégram,1
et,4
gram,2
pic,2
ratatam,1
stram,2
Minyar Sassi Hidri Technologies pour le Big Data 90 / 227
MapReduce Exemples
Exemple 1 : Comptage du nombre de mots
Quatre Mappers et deux Reduces
I Nous venons d’écrire notre premier programme MapReduce permettant de compter le
nombre d’occurrences des différents mots composant un livre.
I Il faut néanmoins reconnaître qu’avec un seul Mapper et un seul Reducer les performances
de notre programme ne seront pas meilleures que celle d’un programme classique s’exécutant
sur une seule machine.
I Pour tirer parti des spécificités de Hadoop, nous allons faire évoluer notre cluster en le
configurant pour qu’il dispose de :
Quatre Mappers.
Deux Reducers.
Minyar Sassi Hidri Technologies pour le Big Data 91 / 227
MapReduce Exemples
Exemple 1 : Comptage du nombre de mots
Quatre Mappers et deux Reduces : La phase Map
I Chacun des quatre mappers va travailler sur une partie du fichier en
entrée, par exemple :
Le mapper n◦ 1 va traiter la ligne 1.
Le mapper n◦ 2 va traiter la ligne 2.
Le mapper n◦ 3 va traiter la ligne 3.
Le mapper n◦ 4 va traiter la ligne 4.
I Chaque mapper va produire un fichier de résultats intermédiaires :
Minyar Sassi Hidri Technologies pour le Big Data 92 / 227
MapReduce Exemples
Exemple 1 : Comptage du nombre de mots
Quatre Mappers et deux Reduces : Entre la phase Map et la phase Reduce
I Avant le transfert des résultats intermédiaires des mappers vers les
reducers :
Les enregistrements sont triés par clé.
Tous les enregistrements correspondant à une même clé sont envoyés vers un seul et
même reducer.
I Hadoop garantit :
Que si un reducer rec¸oit le couple am,1 du mapper1, alors il recevra aussi le couple
am,1 du mapper4.
Que tous les enregistrements correspondant à la clé am seront regroupés et envoyés
au même reducer.
I On est ainsi sûr que le comptage sera exact.
I Les fichiers en entrée des reducers seront par exemple :
Minyar Sassi Hidri Technologies pour le Big Data 93 / 227
MapReduce Exemples
Exemple 1 : Comptage du nombre de mots
Quatre Mappers et deux Reduces : La phase Reduce
Les fichier en sortie des reducers seront alors les suivants :
Il ne reste plus qu’à fusionner les fichiers issus des deux reducers pour obtenir le résultat
cherché.
Par rapport au premier cluster (un mapper et un reducer), ce nouveau cluster (quatre
mappers et deux reducers) permet :
- De diviser par un facteur de l’ordre de quatre le temps d’exécution de la phase Map.
- De diviser par un facteur de l’ordre de deux le temps d’exécution de la phase Reduce.
Le gain peut paraître dérisoire dans notre exemple dont l’intérêt est avant tout pédagogique
mais, dans la réalité, Hadoop a permis à des entreprises de diviser par un facteur 10 les
temps d’exécution de certains travaux informatiques. Une telle amélioration peut être vitale
lorsque les travaux concernés doivent tourner tous les jours, et que leur temps d’exécution
dans un environnement informatique classique avoisine les 24 heures.
Minyar Sassi Hidri Technologies pour le Big Data 94 / 227
MapReduce Exemples
Exemple 2 : Graphe social (1)
On administre un réseau social comportant des millions d’utilisateurs.
Pour chaque utilisateur, on a dans notre BD la liste des utilisateurs qui
sont ses amis sur le réseau (via une requête SQL).
On souhaite afficher quand un utilisateur va sur la page d’un autre
utilisateur une indication Vous avez N amis en commun ;
On ne peut pas se permettre d’effectuer une série de requêtes SQL à
chaque fois que la page est accédée (trop lourd en traitement).
⇒ On va donc développer des programmes Map et Reduce pour cette
opération et exécuter le traitement toutes les nuits sur notre BD, en
stockant le résultat dans une nouvelle table.
Minyar Sassi Hidri Technologies pour le Big Data 95 / 227
MapReduce Exemples
Exemple 2 : Graphe social (2)
Ici, nos données d’entrée sont sous la forme Utilisateur ⇒ Amis :
A ⇒ B, C, D
B ⇒ A, C, D, E
C ⇒ A, B, D, E
D ⇒ A, B, C, E
E ⇒ B, C, D
Puisqu’on est intéressé par l’information amis en commun entre deux
utilisateurs et qu’on aura à terme une valeur par clé, on va choisir pour
clé la concaténation entre deux utilisateurs.
Par exemple, la clé A−B désignera les amis en communs des utilisateurs
A et B.
On peut segmenter les données d’entrée là aussi par ligne.
Minyar Sassi Hidri Technologies pour le Big Data 96 / 227
MapReduce Exemples
Exemple 2 : Graphe social (3)
La phase Map
Notre opération Map va se contenter de prendre la liste des amis fournie
en entrée, et va générer toutes les clés distinctes possibles à partir de
cette liste.
La valeur sera simplement la liste d’amis, telle quelle.
On fait également en sorte que la clé soit toujours triée par ordre
alphabétique (clé B − A sera exprimée sous la forme A − B).
Ce traitement peut paraître contre-intuitif, mais il va à terme nous per-
mettre d’obtenir, pour chaque clé distincte, deux couples (key, value) :
les deux listes d’amis de chacun des utilisateurs qui composent la clé.
Minyar Sassi Hidri Technologies pour le Big Data 97 / 227
MapReduce Exemples
Exemple 2 : Graphe social (4)
La phase Map
Le pseudo code de notre opération Map est le suivant :
Par exemple, pour la première ligne :
On obtiendra les couples (key, value) :
Minyar Sassi Hidri Technologies pour le Big Data 98 / 227
MapReduce Exemples
Exemple 2 : Graphe social (5)
La phase Map
Pour la seconde ligne :
On obtiendra ainsi :
Pour la troisième ligne :
On aura :
...et ainsi de suite pour nos 5 lignes d’entrée
Minyar Sassi Hidri Technologies pour le Big Data 99 / 227
MapReduce Exemples
Exemple 2 : Graphe social (6)
Entre la phase Map et la phase Reduce
Une fois l’opération Map effectuée, Hadoop va récupérer les couples (key,
valeur) de tous les fragments et les grouper par clé distincte. Le résultat
sur la base de nos données d’entrée :
...on obtient bien, pour chaque clé USER1 − USER2, deux listes d’amis :
les amis de USER1 et ceux de USER2.
Minyar Sassi Hidri Technologies pour le Big Data 100 / 227
MapReduce Exemples
Exemple 2 : Graphe social (7)
La phase Reduce
Il nous faut enfin écrire notre programme Reduce. Il va recevoir en entrée
toutes les valeurs associées à une clé. Son rôle va être très simple :
déterminer quels sont les amis qui apparaissent dans les listes (les valeurs)
qui nous sont fournies.
Minyar Sassi Hidri Technologies pour le Big Data 101 / 227
MapReduce Exemples
Exemple 2 : Graphe social (8)
La phase Reduce
Après exécution de l’opération Reduce pour les valeurs de chaque clé
unique, on obtiendra donc, pour une clé A − B, les utilisateurs qui
apparaissent dans la liste des amis de A et dans la liste des amis de B.
Autrement dit, on obtiendra la liste des amis en commun des utilisateurs A
et B. Le résultat est :
On sait ainsi que A et B ont
pour amis communs les
utilisateurs C et D, ou encore
que B et C ont pour amis
communs les utilisateurs A, D
et E.
Minyar Sassi Hidri Technologies pour le Big Data 102 / 227
MapReduce Exemples
Exemple 2 : Graphe social (9)
Synthèse
I En utilisant le modèle MapReduce, on a ainsi pu créer deux programmes très
simples (nos programmes Map et Reduce) de quelques lignes de code seule-
ment, qui permettent d’effectuer un traitement somme toute assez complexe.
I Mieux encore, notre traitement est parallélisable : même avec des dizaines
de millions d’utilisateurs, du moment qu’on a assez de machines au sein du
cluster Hadoop, le traitement sera effectué rapidement. Pour aller plus vite,
il nous suffit de rajouter plus de machines.
I Pour notre réseau social, il suffira d’effectuer ce traitement toutes les nuits à
heure fixe, et de stocker les résultats dans une table.
Ainsi, lorsqu’un utilisateur visitera la page d’un autre utilisateur, un seul SE-
LECT dans la BD suffira pour obtenir la liste des amis en commun - avec un
poids en traitement très faible pour le serveur.
Minyar Sassi Hidri Technologies pour le Big Data 103 / 227
Chapitre 3 - Programmation MapReduce sous
Hadoop
1 Architecture fonctionnelle
2 MapReduce du point de vue du développeur Java : Les entrées / Sorties
3 Création d’un projet Java Wordcount sous Eclipse
4 Hadoop Streaming
Minyar Sassi Hidri Technologies pour le Big Data 104 / 227
Architecture fonctionnelle
1 Architecture fonctionnelle
2 MapReduce du point de vue du développeur Java : Les entrées / Sorties
3 Création d’un projet Java Wordcount sous Eclipse
4 Hadoop Streaming
Minyar Sassi Hidri Technologies pour le Big Data 105 / 227
Architecture fonctionnelle
Principe de programmation
Pour résoudre un problème via la méthodologie MapReduce avec Hadoop,
on doit :
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 clé utiliser pour notre problème.
Écrire le programme pour l’opération Map.
Écrire le programme pour l’opération Reduce.
...et Hadoop se chargera du reste (problématiques calcul distribué,
groupement par clé distincte entre Map et Reduce, etc.).
Minyar Sassi Hidri Technologies pour le Big Data 106 / 227
Architecture fonctionnelle
Architecture fonctionnelle (1)
Comme pour HDFS, la gestion
des tâches de Hadoop se base
sur deux serveurs (des
daemons) :
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 don-
nées de sortie (toujours sur HDFS). Il y a un
seul JobTracker sur une seule machine du clus-
ter Hadoop. Le JobTracker est en communi-
cation avec le NN 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.
Minyar Sassi Hidri Technologies pour le Big Data 107 / 227
Architecture fonctionnelle
Architecture fonctionnelle (2)
I Comme le JobTracker est conscient de la position des données (grâce au NN),
il peut facilement déterminer les meilleures machines auxquelles attribuer les
sous-tâches (celles où les blocs de données correspondants sont stockés).
I Pour effectuer un traitement Hadoop, on va donc :
Stocker nos données d’entrée sur HDFS.
Créer un répertoire où Hadoop stockera les résultats sur HDFS.
Compiler nos programmes Map et Reduce au sein d’un .jar Java.
I On soumettra alors le nom des fichiers d’entrée, le nom du répertoire des résul-
tats, et le .jar lui-même au JobTracker : il s’occupera du reste (et notamment
de transmettre les programmes Map et Reduce aux serveurs TaskTracker des
machines du cluster).
Minyar Sassi Hidri Technologies pour le Big Data 108 / 227
Architecture fonctionnelle
Architecture fonctionnelle (3)
Le JobTracker
I Le déroulement de l’exécution d’une tâche Hadoop suit les étapes sui-
vantes du point de vue du JobTracker :
1. Le client (un outil Hadoop console : $hadoop) va soumettre le travail à effectuer au
JobTracker : une archive Java .jar implémentant les opérations Map et Reduce. Il va
également soumettre le nom des fichiers d’entrée, et l’endroit où stocker les résultats.
2. Le JobTracker communique avec le NN HDFS pour savoir où se trouvent les blocs
correspondant aux noms de fichiers donnés par le client.
3. Le JobTracker, à partir de ces informations, détermine quels sont les nœuds TaskTra-
cker les plus appropriés, c’est à dire ceux qui contiennent les données sur lesquelles
travailler sur la même machine, ou le plus proche possible (même rack/rack proche).
4. Pour chaque morceau des données d’entrée, le JobTracker envoie au TaskTracker
sélectionné le travail à effectuer (Map/Reduce, code Java) et les blocs de données
correspondant.
Minyar Sassi Hidri Technologies pour le Big Data 109 / 227
Architecture fonctionnelle
Architecture fonctionnelle (4)
Le JobTracker
5. Le JobTracker communique avec les nœuds TaskTracker en train d’exécuter les tâches. Ils
envoient régulièrement un heartbeat, un message signalant qu’ils travaillent toujours sur la
sous-tâche rec¸ue. Si aucun heartbeat n’est rec¸u dans une période donnée, le JobTracker
considère la tâche comme ayant échouée et donne le même travail à effectuer à un autre
TaskTracker.
6. Si par hasard une tâche échoue (erreur java, données incorrectes, etc.), le TaskTracker va
signaler au JobTracker que la tâche n’a pas pu être exécutée. Le JobTracker va alors décider
de la conduite à adopter : redonner la sous-tâche à un autre TaskTracker, demander au
même TaskTracker de ré-essayer, marquer les données concernées comme invalides, etc. Il
pourra même blacklister le TaskTracker concerné comme non-fiable dans certains cas.
7. Une fois que toutes les opérations envoyées aux TaskTracker (Map + Reduce) ont été effec-
tuées et confirmées comme effectuées par tous les noeuds, le JobTracker marque la tâche
comme effectuée. Des informations détaillées sont disponibles (statistiques, TaskTracker
ayant posé problème, etc.).
Minyar Sassi Hidri Technologies pour le Big Data 110 / 227
Architecture fonctionnelle
Architecture fonctionnelle (5)
Le JobTracker
I On peut également obtenir à tout moment de la part du JobTracker des informations sur les
tâches en train d’être effectuées : étape actuelle (Map, Shuffle, Reduce), % de complétion,
etc..
I La soumission du .jar, l’obtention de ces informations, et d’une manière générale toutes les
opérations liées à Hadoop s’effectuent avec le même unique client console vu précédem-
ment : $hadoop.
I De manière similaire au NN de HDFS, il n’y a qu’un seul JobTracker et s’il tombe en panne,
le cluster tout entier ne peut plus effectuer de tâches. La aussi, des résolutions aux problème
sont prévues dans la roadmap Hadoop.
I Généralement, on place le JobTracker et le NN HDFS sur la même machine (une machine
plus puissante que les autres), sans y placer de TaskTracker/DN 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 nœud maître (Master Node). Les
autres nœuds (contenant TaskTracker + DN) sont communément appelés nœuds esclaves
(Slave Node).
I Même si le JobTracker est situé sur une seule machine, le client qui envoie la tâche au
JobTracker initialement peut être exécuté sur n’importe quelle machine du cluster - comme
les TaskTracker sont presents sur la machine, ils indiquent au client comment joindre le
JobTracker.
Minyar Sassi Hidri Technologies pour le Big Data 111 / 227
Architecture fonctionnelle
Architecture fonctionnelle (6)
Le TaskTracker
I Lorsque le TaskTracker rec¸oit une nouvelle tâche à effectuer (Map, Reduce,
Shuffle) depuis le JobTracker, le TaskTracker va démarrer une nouvelle ins-
tance de Java avec le fichier .jar fourni par le JobTracker, en appelant l’opé-
ration correspondante.
I Une fois la tâche démarrée, il enverra régulièrement au JobTracker ses mes-
sages heartbeats.
I Lorsqu’une sous-tâche est terminée, le TaskTracker envoie un message au
JobTracker pour l’en informer, que la tâche se soit bien déroulée ou non (il
indique évidemment le résultat au JobTracker).
Minyar Sassi Hidri Technologies pour le Big Data 112 / 227
MapReduce du point de vue du développeur Java
1 Architecture fonctionnelle
2 MapReduce du point de vue du développeur Java : Les entrées / Sorties
3 Création d’un projet Java Wordcount sous Eclipse
4 Hadoop Streaming
Minyar Sassi Hidri Technologies pour le Big Data 113 / 227
MapReduce du point de vue du développeur Java
Les entrées-sorties (1)
I Dans MapReduce, les données sont toujours lues ou écrites selon le
format (key, value). Cette fac¸on de procéder peut paraître réductrice,
mais en fait :
On s’aperc¸oit à l’usage qu’il est possible, avec un peu d’expérience
et d’astuce, de traiter beaucoup de problèmes de cette manière, y
compris, par exemple, la recherche du plus court chemin dans un
graphe orienté acyclique.
Le fait d’imposer une structure unique et simple aux enregistre-
ments, tant en lecture qu’en écriture, contribue à l’efficacité d’Ha-
doop au niveau des entrées-sorties.
Minyar Sassi Hidri Technologies pour le Big Data 114 / 227
MapReduce du point de vue du développeur Java
Les entrées-sorties (2)
I Les données lues par le mapper sont définies au niveau du driver. La
définition des données comprend :
Leur localisation (fichier ou répertoire).
Le type des enregistrements, qui est défini par la classe InputFormat.
La détermination de la taille des InputSplits : un InputSplit définit le
volume des données qui seront lues à chaque opération de lecture :
- L’InputSplit a le plus souvent la taille d’un bloc HDFS, mais ce n’est pas une
obligation.
- Il est du ressort de Hadoop de faire le lien entre enregistrements et InputSplits
d’une part, et entre InputSplits et blocs HDFS d’autre part.
- Il n’y a en effet aucune garantie que la fin d’un bloc corresponde à la fin d’un
enregistrement.
Minyar Sassi Hidri Technologies pour le Big Data 115 / 227
MapReduce du point de vue du développeur Java
Les entrées-sorties (3)
I Hadoop prend en compte par défaut les types d’enregistrement sui-
vants :
TextInputFormat :
- Type par défaut.
- value est une ligne entière terminée par n.
- key est l’offset de la ligne depuis le début de fichier (elle est souvent sans intérêt
pour le problème à traiter et, dans ce cas, il suffit de l’ignorer).
KeyValueTextInputFormat :
- Chaque ligne est supposée être au format <key><separator><value> n.
- Le separator par défaut est tab.
SequenceFileInputFormat :
- Permet de lire un fichier binaire de paires <key, value>, comprenant éventuel-
lement des métadonnées.
SequenceFileAsTextInputFormat :
- Format identique au précédent mais, en plus, convertit les clés et les valeurs
en strings (<key.toString(), value.toString()>).
Minyar Sassi Hidri Technologies pour le Big Data 116 / 227
MapReduce du point de vue du développeur Java
Les entrées-sorties (4)
I Dans Hadoop :
Les clés sont des objets qui implémentent l’interface ComparableWritable.
Les valeurs sont des objets qui implémentent l’interface Writable.
I L’utilisation de l’interface Writable permet d’optimiser le processus de
sérialisation lors des accès disque. Tout type de données dans Hadoop
doit implémenter Writable.
I Par défaut, Hadoop propose les types de données suivants :
IntWritable (int en Java).
LongWritable (long en Java).
FloatWritable (float en Java).
DoubleWritable (double en Java).
Text (string en Java).
etc..
Minyar Sassi Hidri Technologies pour le Big Data 117 / 227
MapReduce du point de vue du développeur Java
Programmation MapReduce sous Hadoop
I Comme indiqué précédemment, Hadoop est développé en Java. Les tâches
Map/Reduce sont donc implémentables par le biais d’interfaces Java (il existe
cependant des wrappers très simples permettant d’implémenter ses tâches
dans n’importe quel langage).
I Un programme Hadoop se compile au sein d’un .jar.
I 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 (key, value) 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’operation Map).
Une classe Reduce (qui effectuera l’operation Reduce).
Minyar Sassi Hidri Technologies pour le Big Data 118 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop
La classe Driver
I La classe Driver contient le main de notre programme.
I 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. L’objet en
question pourrait aussi nous permettre de récupérer nous-même des options de
configuration qui nous intéressent.
- 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 ; on souhaite que l’utilisateur puisse préciser
le nom du fichier d’entrée et le nom du répertoire de sortie HDFS pour nos
tâches Hadoop grâce à la ligne de commande.
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 (key,value) Map et Reduce.
Informer Hadoop des fichiers d’entrée/sortie pour notre tâche sur HDFS.
Enfin, utiliser l’objet Job crée précédemment pour déclencher le lancement de la tâche
via le cluster Hadoop.
Minyar Sassi Hidri Technologies pour le Big Data 119 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop - Classe Driver
Exemple : Occurrences de mots (1)
I Le prototype de notre fonction main() :
public static void main(String[] args) throws Exception
On se sert de args pour récupérer les arguments de la ligne de commande. Plusieurs
fonctions Hadoop appelées au sein du main sont susceptibles de déclencher des exceptions
- on l’indique donc lors de la déclaration.
I Avant toute chose, on créé dans notre main un nouvel objet Configuration Hadoop :
// Créé un objet de configuration Hadoop.
Configuration conf=new Configuration() ;
Le package à importer est : org.apache.hadoop.conf.Configuration
I Avant toute chose, on créé dans notre main un nouvel objet Configuration Hadoop :
I On créé ensuite un nouvel objet Hadoop Job :
Job job=Job.getInstance(conf, ”Compteur de mots v1.0”) ;
Le package à importer est le suivant : org.apache.hadoop.mapreduce.Job
Minyar Sassi Hidri Technologies pour le Big Data 120 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop - Classe Driver
Exemple : Occurrences de mots (2)
I Ensuite, il faut indiquer à Hadoop - par le biais de l’objet Job nouvellement créé - quelles
sont les classes Driver, Map et Reduce de notre programme Hadoop.
Dans notre cas, il s’agira respectivement des classes WCount, WCountMap et WCountRe-
duce du package org.mbds.hadoop.wordcount
On utilise pour ce faire les fonctions suivantes :
job.setJarByClass(WCount.class) ;
job.setMapperClass(WCountMap.class) ;
job.setReducerClass(WCountReduce.class) ;
I Il faut ensuite indiquer à Hadoop quels sont les types de données que l’ont souhaite utiliser
pour les couples (key,valeur) de nos opérations map et reduce. Dans le cas de notre compteur
d’occurrences de mots, on souhaite utiliser des chaînes de caractères pour les clefs (nos
mots) et des entiers pour nos occurrences.
Remarque : On ne doit pas utiliser les types classiques Int et String Java pour désigner nos
types, mais des classes qui leur correspondent et qui sont propres à Hadoop. Dans notre
cas, les classes IntWritable et Text.
job.setOutputKeyClass(Text.class) ;
job.setOutputValueClass(IntWritable.class) ;
Les packages des types en question : org.apache.hadoop.io.IntWritable et org.apache.hadoop.io.Text
Il en existe beaucoup d’autres dans org.apache.hadoop.io.∗.
Minyar Sassi Hidri Technologies pour le Big Data 121 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop - Classe Driver
Exemple : Occurrences de mots (3)
I Ensuite, on doit indiquer où se situent nos données d’entrée et de sortie dans HDFS. On
utilise pour ce faire les classes Hadoop FileInputFormat et FileOutputFormat.
I Ces classes sont implémentées suivant un design pattern Singleton - il n’est pas nécessaire
de les instancier dans le cas qui nous intéresse (dans des cas plus complexe, on étendra
parfois la classe en question dans une nouvelle classe qui nous est propre).
On procède de la manière suivante :
FileInputFormat.addInputPath(job, new Path(ourArgs[0])) ;
FileOutputFormat.setOutputPath(job, new Path(ourArgs[1])) ;
Les packages à utiliser :
- org.apache.hadoop.mapreduce.lib.input.FileInputFormat
- org.apache.hadoop.mapreduce.lib.input.FileOutputFormat
- org.apache.hadoop.fs.Path
Minyar Sassi Hidri Technologies pour le Big Data 122 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop - Classe Driver
Exemple : Occurrences de mots (4)
I Enfin, il reste à lancer l’exécution de la tâche par le biais du cluster Hadoop. On procède
ainsi :
if(job.waitForCompletion(true))
System.exit(0) ;
System.exit(-1) ;
I La fonction waitForCompletion de l’objet job va exécuter la tâche et attendre la fin de son
exécution.
I Elle prend comme argument un booléen indiquant à Hadoop si oui ou non il doit donner des
indications sur la progression de l’exécution à l’utilisateur sur la sortie standard (stdout).
I Elle renvoie true en cas de succés ; ici, on terminera l’exécution du programme en renvoyant
0 si tout s’est bien passé, et -1 en cas de problème (codes de retour unix standards).
Minyar Sassi Hidri Technologies pour le Big Data 123 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop - Classe Driver
Exemple : Occurrences de mots (5)
// Notre classe Driver (contient le main du programme Hadoop).
public class WCount
{
// Le main du programme.
public static void main(String[] args) throws Exception
{
// Créé un object de configuration Hadoop.
Configuration conf=new Configuration() ;
// Permet à Hadoop de lire ses arguments génériques, récupère les arguments restants dans ourArgs.
String[] ourArgs=new GenericOptionsParser(conf,args).getRemainingArgs() ;
// Obtient un nouvel objet Job : une tâche Hadoop. On
// fourni la configuration Hadoop ainsi qu’une description textuelle de la tâche.
Job job=Job.getInstance(conf, ”Compteur de mots v1.0”) ;
// Défini les classes driver, map et reduce.
job.setJarByClass(WCount.class) ; job.setMapperClass(WCountMap.class) ;
job.setReducerClass(WCountReduce.class) ;
// Défini types clefs/valeurs de notre programme Hadoop.
job.setOutputKeyClass(Text.class) ;
job.setOutputValueClass(IntWritable.class) ;
// Définit les fichiers d’entrée du programme et le répertoire des résultats.
// On se sert du premier et du deuxième argument restants pour permettre à
// l’utilisateur de les spécifier lors de l’exécution.
FileInputFormat.addInputPath(job, new Path(ourArgs[0])) ;
FileOutputFormat.setOutputPath(job, new Path(ourArgs[1])) ;
// On lance la tâche Hadoop. Si elle s’est effectuée correctement, on renvoie 0. Sinon, on renvoie -1.
if(job.waitForCompletion(true))
System.exit(0) ; System.exit(-1) ;
} }
Minyar Sassi Hidri Technologies pour le Big Data 124 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop
La classe Map
I La classe Map va être en charge de l’opération Map de notre programme.
I Elle doit étendre la classe Hadoop org.apache.hadoop.mapreduce.Mapper.
I Il s’agit d’une classe générique qui se paramétrise avec quatre types :
Un type keyin : le type de clé d’entrée.
Un type valuein : le type de valeur d’entrée.
Un type keyout : le type de clé de sortie.
Un type valueout : le type de valeur de sortie.
I Le type keyin est notamment utile lorsqu’on utilise des fonctionnalités plus
avancées, comme la possibilité d’effectuer plusieurs opérations Map les unes
à la suite des autres, auquel cas notre opération Map recevra en entrée des
couples (key,value).
I Dans notre cas, nous n’utiliserons pas cette possibilité ; on utilisera donc le
type Java Object comme type keyin.
Minyar Sassi Hidri Technologies pour le Big Data 125 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop - Classe Map
Exemple : Occurrences de mots (1)
Dans notre exemple, notre classe Map sera déclarée ainsi :
public class WCountMap extends Mapper<Object, Text, Text, IntWritable>
On utilise ici comme types :
Text pour le type valuein, puisque notre valeur d’entrée à la fonction Map est une chaîne
de caractères (une ligne de texte).
Text pour le type keyout, puisque notre valeur de clé pour les couples (key,vakue) de la
fonction Map est également une chaîne de caractères (le mot dont on compte les occur-
rences).
IntWritable pour le type valueout, puisque notre valeur pour les couples (key,value) de la
fonction Map est un entier (le nombre d’occurrences).
Ici aussi, on utilise les types Hadoop et non les types natifs Java (Int et
String).
Minyar Sassi Hidri Technologies pour le Big Data 126 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop - Classe Map
Exemple : Occurrences de mots (2)
Au sein de la classe Mapper, c’est la fonction map qui va s’occuper d’effectuer la tâche
Map. C’est la seule qu’on doit absolument implémenter.
Elle prend trois arguments :
- La clé d’entrée keyin.
La valeur d’entrée valuein (la ligne de texte dont on souhaite compter les mots).
- Un Context Java qui représente un handle Hadoop et nous permettra de retourner les couples (key,value) résultant
de notre opération Map.
Le prototype de notre fonction map :
protected void map(Object key, Text value, Context context)
throws IOException, InterruptedException
Comme pour la fonction main, la fonction map appellera des fonctions susceptibles de
déclencher des exceptions (notamment concernant l’interruption de l’exécution Hadoop ou
des problèmes d’accès HDFS) - on le précise donc dans sa déclaration.
Minyar Sassi Hidri Technologies pour le Big Data 127 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop - Classe Map
Exemple : Occurrences de mots (3)
Au sein de la méthode map, on va donc effectuer la tâche Map de notre programme
Map/Reduce.
Dans le cadre de notre exemple, la fonction devra parcourir la ligne de texte fournie en
entrée, et renvoyer un couple (key,value) pour chacun des mots. Ce couple devra avoir pour
clé le mot en question, et pour valeur l’entier 1.
Dans la fonction map, afin d’indiquer à Hadoop qu’on souhaite renvoyer un couple (key,value),
on utilise la fonction write de notre objet Context. Elle peut être appelée autant de fois
que nécessaire ; une fois pour chacun des couples (key,value) qu’on souhaite renvoyer. Par
exemple context.write(”am”, 1).
Il faut évidemment que la clé et la valeur renvoyées ainsi correspondent aux types keyout
et valueout de notre classe Mapper.
Minyar Sassi Hidri Technologies pour le Big Data 128 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop - Classe Map
Exemple : Occurrences de mots (4)
package org.mbds.hadoop.wordcount ;
import org.apache.hadoop.mapreduce.Job ;
import org.apache.hadoop.io.Text ;
import org.apache.hadoop.io.IntWritable ;
import java.util.StringTokenizer ;
import org.apache.hadoop.mapreduce.Mapper ;
import java.io.IOException ;
// Notre classe Map.
public class WCountMap extends Mapper<Object, Text, Text, IntWritable>
{
// IntWritable contant de valeur 1.
private static final IntWritable ONE=new IntWritable(1) ;
// La fonction map elle-même.
protected void map(Object offset, Text value, Context context)
throws IOException, InterruptedException
{
// Un StringTokenizer va nous permettre de parcourir chacun des mots de la ligne passée à Map.
StringTokenizer tok=new StringTokenizer(value.toString(), ” ”) ;
while(tok.hasMoreTokens())
{ Text word=new Text(tok.nextToken()) ;
// On renvoie notre couple (clef ;valeur) : le mot courant suivi de la valeur 1.
context.write(word, ONE) ;
}
}
}
Minyar Sassi Hidri Technologies pour le Big Data 129 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop
La classe Reduce
I La classe reduce va être en charge de l’opération Reduce de notre programme.
I Elle doit étendre la classe Hadoop org.apache.hadoop.mapreduce.Reducer.
I Il s’agit là aussi d’une classe générique qui se paramétrise avec les mêmes
quatre types que pour la classe Mapper : keyin, valuein, keyout et valueout.
I On rappelle que l’opération Reduce recevra en entrée une clé unique, associée
à toutes les valeurs pour la clé en question.
I Dans le cas du compteur d’occurrences de mots, on recevra en entrée une
valeur unique pour la clé, par exemple am, suivi de toutes les valeurs qui ont
été rencontrées à la sortie de l’opération Map pour la clé am (par exemple
deux fois la valeur 1 si le mot am était présent deux fois dans notre texte
d’exemple).
Minyar Sassi Hidri Technologies pour le Big Data 130 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop - Classe Reduce
Exemple : Occurrences de mots (1)
Dans notre exemple, la classe Reduce sera définie comme suit :
public class WCountReduce extends Reducer<Text, IntWritable, Text, Text>
On utilise pour chacun des types paramétrables :
Text pour keyin : il s’agit de notre clé unique d’entrée - le mot concerné.
IntWritable pour valuein : le type de nos valeurs associées à cette clé (le nombre d’occur-
rences, un entier).
Text pour keyout : le type de clé de sortie. Nous ne modifierons pas la clé, il s’agira toujours
du mot unique concerné - on utilise donc Text.
Text pour valueout : le type de valeur de sortie. On utilise ici Text - on renverra le nombre
total d’occurrences pour le mot concerné sous la forme d’une chaîne de caractères (on
pourrait également utiliser IntWritable ici).
Là aussi, on utilise les types de données propres à Hadoop.
Minyar Sassi Hidri Technologies pour le Big Data 131 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop - Classe Reduce
Exemple : Occurrences de mots (2)
Au sein de la classe reducer, c’est la fonction reduce qui va effectuer l’opération Reduce.
C’est la seule qu’on doit implémenter.
Elle prend trois arguments : la clé concernée, un Iterable java (une liste) de toutes les
valeurs qui lui sont associées et qui ont été renvoyées par l’opération Map, et enfin un objet
Context java similaire à celui de la fonction map de la classe Mapper, et qui nous permettra
de renvoyer notre valeur finale, associée à la clé.
Dans notre exemple, la déclaration de la fonction reduce :
public void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException
Comme pour map, la fonction fait appel à des fonctions Hadoop susceptibles de provoquer
des exceptions - on l’indique ici aussi.
Minyar Sassi Hidri Technologies pour le Big Data 132 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop - Classe Reduce
Exemple : Occurrences de mots (3)
Au sein de la fonction Reduce, on pourra renvoyer un couple (key,value) en résultat exac-
tement de la même manière que pour la fonction map, par le biais d’un appel à la fonction
write de notre objet Context.
Par exemple : context.write(”am”, ”2 occurrences”) ;
Contrairement à la fonction map, en revanche, on cherche à ne produire qu’une et une seule
valeur de retour pour la clé concernée. On n’appellera donc la fonction write qu’une seule
fois.
Remarque : en théorie et dans des cas plus complexes, on pourrait là aussi appeler la
fonction à plusieurs reprises, pour renvoyer plusieurs couples (key,value). En revanche, Ha-
doop n’appliquera aucun traitement dessus et les considérera simplement comme plusieurs
résultats finaux.
Minyar Sassi Hidri Technologies pour le Big Data 133 / 227
MapReduce du point de vue du développeur Java
Programmation Hadoop - Classe Reduce
Exemple : Occurrences de mots (4)
package org.mbds.hadoop.wordcount ;
import org.apache.hadoop.io.Text ;
import org.apache.hadoop.io.IntWritable ;
import org.apache.hadoop.mapreduce.Reducer ;
import java.util.Iterator ;
import java.io.IOException ;
// Notre classe Reduce - paramétrée avec un type Text pour la clé, un type de valeur
// IntWritable, et un type de retour (le retour final de la fonction Reduce) Text.
public class WCountReduce extends Reducer<Text, IntWritable, Text, Text>
{
// La fonction Reduce elle-même. Les arguments : la clé key, un Iterable de toutes les valeurs qui sont associées
// à la clé en question, et le contexte Hadoop (un handle qui nous permet de renvoyer le résultat à Hadoop)
public void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException
{
// Pour parcourir toutes les valeurs associées à la clé fournie.
Iterator<IntWritable> i=values.iterator() ;
int count=0 ; // Notre total pour le mot concerné.
while(i.hasNext()) // Pour chaque valeur...
count+=i.next().get() ; // ...on l’ajoute au total.
// On renvoie le couple (clef ;valeur) constitué de notre clef key et du total, au format Text.
context.write(key, new Text(count+” occurrences.”)) ;
}
}
Minyar Sassi Hidri Technologies pour le Big Data 134 / 227
Création d’un projet Java Wordcount sous Eclipse
1 Architecture fonctionnelle
2 MapReduce du point de vue du développeur Java : Les entrées / Sorties
3 Création d’un projet Java Wordcount sous Eclipse
4 Hadoop Streaming
Minyar Sassi Hidri Technologies pour le Big Data 135 / 227
Création d’un projet Java Wordcount sous Eclipse
Création d’un projet Java Wordcount sous Eclipse
Création d’un nouveau projet
Lien : http ://fr.slideshare.net/andreaiacono/mapreduce-34478449 ?related=1
http ://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/
Minyar Sassi Hidri Technologies pour le Big Data 136 / 227
Création d’un projet Java Wordcount sous Eclipse
Création d’un projet Java Wordcount sous Eclipse
Importation des libraires externes (1)
Minyar Sassi Hidri Technologies pour le Big Data 137 / 227
Création d’un projet Java Wordcount sous Eclipse
Création d’un projet Java Wordcount sous Eclipse
Importation des libraires externes (2)
Minyar Sassi Hidri Technologies pour le Big Data 138 / 227
Création d’un projet Java Wordcount sous Eclipse
Création d’un projet Java Wordcount sous Eclipse
Création d’une nouvelle classe WordCount
Pour plus de détail consultez : http ://kickstarthadoop.blogspot.com/2011/04/word-count-hadoop-map-reduce-example.html.
Minyar Sassi Hidri Technologies pour le Big Data 139 / 227
Création d’un projet Java Wordcount sous Eclipse
Création d’un projet Java Wordcount sous Eclipse
Exportation du Jar
Minyar Sassi Hidri Technologies pour le Big Data 140 / 227
Création d’un projet Java Wordcount sous Eclipse
Exécution du Jar sous Hadoop avec la distribution Cloudera
Notre entrée
[clouderaquickstart ∼]$hadoop fs -cat /home/cloudera/wordcount.txt
Hello Hadoop Goodbye Hadoop
Affichage du contenu du système de fichiers :
[cloudera@quickstart ∼]$ hadoop fs -ls
Found 3 items
drwx—— - cloudera cloudera 0 2015-03-24 09 :41 .Trash
drwx—— - cloudera cloudera 0 2015-03-24 19 :01 .staging
drwxr-xr-x - cloudera cloudera 0 2015-03-24 19 :01 oozie-oozi
Copie du fichier dans HDFS
[clouderaquickstart ∼]$ hadoop fs -mkdir Data Input
[clouderaquickstart ∼]$ hadoop fs -put /home/cloudera/wordcount.txt Data Input/
[clouderaquickstart ∼]$ hadoop fs -ls Data Input
Found 1 items
-rw-r–r– 1 cloudera cloudera 30 2015-03-24 20 :23 input/wordcount.txt
[clouderaquickstart ∼]$ hadoop fs -cat input/wordcount.txt
Hello Hadoop, Goodbye Hadoop.
[clouderaquickstart ∼]$
Exécution
[clouderaquickstart ∼]$ hadoop jar /home/cloudera/WCount.jar WCount Data Input/wordcount.txt Output
Affichage du contenu du répertoire Output
[clouderaquickstart ∼]$ hadoop fs -ls output
Affichage du résultat
[clouderaquickstart ∼]$ hadoop fs -cat Output/part-00000
Goodbye 1 Hadoop 2 Hello 1
Minyar Sassi Hidri Technologies pour le Big Data 141 / 227
Création d’un projet Java Wordcount sous Eclipse
Exécution du Jar sous Hadoop avec la distribution Cloudera
Résultat
Hadoop stocke les résultats dans une série de fichiers part-r-XXXX, où XXXX est un
compteur incremental.
L’idée est ici de stocker de grandes quantités de résultats dans de nombreux fichiers
différents, qui seront en conséquences distribués sur tout le cluster HDFS.
Le nom du fichier est paramétrable dans la configuration Hadoop.
On a un fichier Ąpart-r par opération Reduce exécutée. Le r au sein du nom signifie
Reduce. On peut également demander à Hadoop d’effectuer uniquement les opérations
Map (par exemple pour du debug), auquel cas on aura une série de fichiers Ąpart-m.
Un fichier SUCCESS (vide) est également crée dans le repertoire des résultats en cas de
succès. Cela permet de contrôler que tout s’est bien passe rapidement (avec un simple
hadoop fs -ls sur HDFS).
Minyar Sassi Hidri Technologies pour le Big Data 142 / 227
Création d’un projet Java Wordcount sous Eclipse
Autres exemples
I Occurrences de mots :
Java : http ://www.bogotobogo.com/Hadoop/BigData hadoop Creating Java
Wordcount Project with Eclipse MapReduce2 Part2.php
Python : http ://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce
-program-in-python/
I Jeu de carte :
Java : https ://github.com/eljefe6a/UnoExample
Python : https ://github.com/eljefe6a/UnoExample/tree/master/scripts
I Températures Max et Min :
Java : https ://letsdobigdata.wordpress.com/2013/12/07/running-hadoop-mapreduce-
application-from-eclipse-kepler/
Python : https ://github.com/tomwhite/hadoop-book/tree/master/ch02-mr-intro/src/
main/python
Autres langages : https ://github.com/tomwhite/hadoop-book/tree/master/ch02-
mr-intro/src/main
I Jointure :
Java : https ://gist.github.com/airawat/6666608
Python : https ://chamibuddhika.wordpress.com/2012/02/26/joins-with-map-reduce/
I Ventes : https ://github.com/P7h/IntroToHadoopAndMR Udacity Course
Minyar Sassi Hidri Technologies pour le Big Data 143 / 227
Création d’un projet Java Wordcount sous Eclipse
Quelques remarques générales concernant les mappers et
reducers
I Un job Hadoop comprend au minimum un mapper : il peut ne pas comprendre de phase
reduce.
I Durant la phase de shuffle & sort, tous les mappers sont susceptibles d’envoyer des données
vers tous les reducers.
I Cette phase pourrait constituer un goulot d’étranglement en saturant le réseau : des méca-
nismes au sein de Hadoop permettent d’éviter qu’une telle situation se produise :
Chaque reducer fournit une partie du résultat global : si l’on souhaite disposer d’un
seul fichier regroupant l’ensemble des résultats en sortie d’un job Hadoop, il faut
paramétrer le job avec un seul reducer. Attention cependant à l’impact d’un tel choix
sur le niveau de performance du job.
Il n’existe aucune garantie quant à l’ordre de traitement des données d’un job Hadoop.
Une conséquence de cette situation est que Hadoop ne peut pas traiter n’importe quel
problème de manière efficace :
- Rechercher un maximum ou un minimum dans un ensemble de données, compter des données... sont des
exemples de problèmes qu’il est aisé de traiter avec Hadoop.
- Calculer la moyenne d’un ensemble de données est un problème qu’il est plus malaisé de traiter avec
Hadoop, car le calcul de la moyenne n’est pas une opération associative : si l’on divise l’ensemble des
données en plusieurs parties - chacune correspondant par exemple à un mapper - la moyenne de l’ensemble
ne sera généralement pas égale à la moyenne des moyennes des parties.
Minyar Sassi Hidri Technologies pour le Big Data 144 / 227
Hadoop Streaming
1 Architecture fonctionnelle
2 MapReduce du point de vue du développeur Java : Les entrées / Sorties
3 Création d’un projet Java Wordcount sous Eclipse
4 Hadoop Streaming
Minyar Sassi Hidri Technologies pour le Big Data 145 / 227
Hadoop Streaming
Hadoop Streaming
I Au delà de Java, Hadoop permet également l’exécution d’un programme Ha-
doop écrit dans d’autres langages, par exemple en C, en Python ou encore en
bash (shell scripting).
I Pour ce faire, un outil est distribué avec Hadoop : streaming. Il s’agit d’un .jar
qui est capable de prendre en argument des programmes ou scripts définissant
les tâches Map et Reduce, ainsi que les fichiers d’entrée et le répertoire de
sortie HDFS, et d’exécuter ainsi la tâche spécifiée sur le cluster.
I Ce .jar est disponible dans le répertoire d’installation Hadoop et porte le
nom hadoop-streaming-VERSION.jar, où VERSION est la version de Hadoop
concernée.
I Il s’agit en réalité d’un programme Hadoop Java classique, mais qui appelle
les tâches Map et Reduce par le biais du système.
Minyar Sassi Hidri Technologies pour le Big Data 146 / 227
Hadoop Streaming
Streaming - Map
I Lorsqu’on développe un programme Map Hadoop dans un autre langage pour
son utilisation avec l’outil streaming, les données d’entree doivent être lues
sur l’entree standard (stdin) et les données de sorties doivent être envoyées
sur la sortie standard (stdout).
I En entrée du script ou programme Map, on aura une série de lignes : nos
données d’entrée (par exemple dans le cas du compteur d’occurrences de
mots, des lignes de notre texte).
I En sortie du script ou programme Map, on doit écrire sur stdout notre série
de couples (key, value) au format : Key[TABULATION]Value.
...avec une ligne distincte pour chaque (key,value).
Minyar Sassi Hidri Technologies pour le Big Data 147 / 227
Hadoop Streaming
Streaming - Reduce
I Lorsqu’on développe un programme Reduce Hadoop dans un autre langage
pour son utilisation avec l’outil streaming, les données d’entree et de sortie
doivent être la aussi lues/ecrites sur stdin et stdout (respectivement).
I En entrée du script ou programme Reduce, on aura une série de lignes : des
couples (key,value) au format : Key[TABULATION]Value.
I Les couples seront triés par clé distincte, et la clé répétée à chaque fois. Par
ailleurs, on est susceptible d’avoir des clés différentes au sein d’une seule et
même exécution du programme reduce.
I En sortie du script ou programme Reduce, on doit écrire des couples (key,value),
toujours au format Key[TABULATION]Value.
Remarque : d’ordinaire, on écrira évidemment un seul couple (key,value) par
clé distincte.
Minyar Sassi Hidri Technologies pour le Big Data 148 / 227
Hadoop Streaming
Exécution du Jar sous Hadoop Streaming avec la
distribution Cloudera
Notre entrée
[clouderaquickstart ∼]$ cat /home/cloudera/wordcount.txt
Hello Hadoop Goodbye Hadoop
Affichage du contenu du système de fichiers :
[cloudera@quickstart ∼]$ hadoop fs -ls
Copie du fichier dans HDFS
[clouderaquickstart ∼]$ hadoop fs -mkdir Data Input
[clouderaquickstart ∼]$ hadoop fs -put /home/cloudera/wordcount.txt Data Input/
[clouderaquickstart ∼]$ hadoop fs -ls Data Input
Création de deux fichiers mapper.py et reducer.py :
http ://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/
Attribution des rôles :
[clouderaquickstart ∼]$chmod +x /home/cloudera/mapper.py
[clouderaquickstart ∼]$chmod +x /home/cloudera/reducer.py
Exécution
[clouderaquickstart ∼]$ hadoop jar
/usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.5.0-mr1-cdh5.3.0.jar -file
/home/cloudera/mapper.py -mapper /home/cloudera/mapper.py -file /home/cloudera/reducer.py -reducer
/home/cloudera/reducer.py -input Data Input -output Output
Affichage du résultat
[clouderaquickstart ∼]$ hadoop fs -cat Output/part-00000
Goodbye 1 Hadoop 2 Hello 1
Minyar Sassi Hidri Technologies pour le Big Data 149 / 227
Chapitre 4 - Traitement de données et
requêtage sous Hadoop
1 Traitement des données
2 Comment réconcilier les Big Data avec le temps réel ? Lambda-architecture
3 Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL
Minyar Sassi Hidri Technologies pour le Big Data 150 / 227
Traitement des données
1 Traitement des données
Traitement par lot : Batch processing
Traitement par streaming : Stream processing
2 Comment réconcilier les Big Data avec le temps réel ? Lambda-architecture
Big Data + Temps Réel : Pour quels use-cases ?
Le système Big Data à construire
Architecture Lambda
3 Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL
Apache Pig
Apache Hive
Spark
Minyar Sassi Hidri Technologies pour le Big Data 151 / 227
Traitement des données Traitement par lot : Batch processing
Traitement par lot : Batch processing
Présentation
I Moyen efficace de traiter de grands volumes de données.
I Les données sont collectées, stockées, traitées, puis les résultats
fournis.
I Les systèmes de batch processing ont besoin de programmes
différents pour l’entrée, le traitement et la génération des données.
I Le traitement est réalisé sur l’ensemble des données.
I Traitement de Données Complexes (CEP : Complex Event
Processing).
- Concept de traitement des évènements pour identifier les évènements significatifs.
- Détection de schémas complexes, corrélation, abstraction et hiérarchie entre
évènements.
I Hadoop MapReduce est un exemple de système utilisant le traitement
par lot.
Minyar Sassi Hidri Technologies pour le Big Data 152 / 227
Traitement des données Traitement par lot : Batch processing
Traitement par lot : Batch processing
Caractéristiques
I A accès à toutes les données.
I Peut réaliser des traitements lourds et complexes.
I Est en général plus concerné par le débit (nombre d’actions réalisées en une unité de
temps) que par la latence (temps requis pour réaliser l’action) des différents composants
du traitement.
I Sa latence est calculée en minutes (voire plus ! !).
I Cible les caractéristiques volume et variété des Big Data.
I Inconvénients
- Toutes les données doivent être prêtes avant le début du job.
- N’est pas approprié pour des traitements en ligne ou temps réel.
- Latence d’exécution élevée.
- Produit des résultats sur des données relativement anciennes.
I Exemples : Les chèques de dépôt dans une banque sont accumulés et traités chaque jour,
les statistiques par mois/jour/année, factures générées pour les cartes de crédit (en
général mensuelles)...
Minyar Sassi Hidri Technologies pour le Big Data 153 / 227
Traitement des données Traitement par streaming : Stream processing
Traitement par Streaming : Stream processing
Caractéristiques
I Les traitements se font sur un élément ou un petit nombre de
données récentes.
I Le traitement est relativement simple.
I Doit compléter chaque traitement en un temps proche du temps-réel.
I Asynchrone : les sources de données n’interagissent pas directement
avec l’unité de traitement en streaming, en attendant une réponse par
exemple.
I La latence de traitement est estimée en secondes.
Minyar Sassi Hidri Technologies pour le Big Data 154 / 227
Traitement des données Traitement par streaming : Stream processing
Traitement par Streaming
Inconvénients
I Pas de visibilité sur l’ensemble des données.
- Certains types de traitements ne peuvent pas être réalisés.
I Complexité opérationnelle élevée.
- Plus complexes à maintenir que les traitements batch.
- Le système doit être toujours connecté, toujours prêt, avoir des temps de réponses
courts, et gérer les données à l’arrivée.
I Risque de perte de données.
I Cas d’utilisation :
- Recommandations en temps réel : prise en compte de navigation récente,
géo-localisation, publicité en ligne, re-marketing.
- Surveillance de larges infrastructures.
- Agrégation de données financières à l’échelle d’une banque.
- Internet des objets ...
Minyar Sassi Hidri Technologies pour le Big Data 155 / 227
Lambda-architecture
1 Traitement des données
Traitement par lot : Batch processing
Traitement par streaming : Stream processing
2 Comment réconcilier les Big Data avec le temps réel ? Lambda-architecture
Big Data + Temps Réel : Pour quels use-cases ?
Le système Big Data à construire
Architecture Lambda
3 Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL
Apache Pig
Apache Hive
Spark
Minyar Sassi Hidri Technologies pour le Big Data 156 / 227
Lambda-architecture Big Data + Temps Réel : Pour quels use-cases ?
Big Data + Temps Réel : Pour quels use-cases ?
I Recommandation en temps réel :
- Prise en compte de la navigation récente, géo-localisation.
- Pour : re-marketing, publicité en ligne...
I Surveillance de larges infrastructures : Data centers...
I Agrégation de données financières à l’échelle d’une banque.
I Internet des objets.
I ....
=⇒ Des flux de données à prendre en compte en temps réel.
+
=⇒ Des historiques très volumineux qui recèlent de la valeur.
Minyar Sassi Hidri Technologies pour le Big Data 157 / 227
Lambda-architecture Le système Big Data à construire
Le système Big Data à construire
+ Prend en charge toutes les données.
- Qu’elles soient historiques ou datent de la
dernière seconde.
+ Capable de répondre à n’importe quel type de
requête.
- Analytique, Data Mining, search...
+ Tolérant les pannes1.
+ Robuste aux évolutions, aux erreurs.
+ Scalable :
- × 10 TB en stockage.
- × 100 requêtes / seconde.
+ Basse latence en écriture ET en lecture.
1
La tolérance aux pannes (on dit également insensibilité aux pannes) désigne une méthode de conception permettant à un
système de continuer à fonctionner, éventuellement de manière réduite (on dit aussi en mode dégradé), au lieu de tomber
complètement en panne, lorsque l’un de ses composants ne fonctionne plus correctement.
Minyar Sassi Hidri Technologies pour le Big Data 158 / 227
Lambda-architecture Le système Big Data à construire
Le système Big Data à construire
query=function(All Data)
Minyar Sassi Hidri Technologies pour le Big Data 159 / 227
Lambda-architecture Architecture Lambda
Architecture Lambda (MapR)
Architecture Lambda : Une architecture basée sur des vues précalculées.
⇒ Séparation des problèmes : stockage, calcul et lecture.
Minyar Sassi Hidri Technologies pour le Big Data 160 / 227
Lambda-architecture Architecture Lambda
Architecture Lambda
Couches
I Batch Layer
- Gérer l’unité de stockage principale : des données brutes,
immuables et complètes.
- Permet de pré-calculer et conserver les résultats de requêtes
appelées batch views.
I Serving Layer
- Permet d’indexer les batch views pour qu’elles soient requêtées
au besoin avec une faible latence.
I Speed Layer
- Permet d’accommoder toutes les requêtes sujettes à des besoins
de faible latence.
- Utilisation d’algorithmes rapides et incrémentaux.
- Gère les données récentes uniquement.
Minyar Sassi Hidri Technologies pour le Big Data 161 / 227
Lambda-architecture Architecture Lambda
Architecture Lambda
Couches
I Lorsque des données entrent dans le système :
1 Les nouvelles données sont envoyées au batch layer et au speed layer.
2 Le batch détient les données maîtres qui sont immuables, en
APPEND-only.
3 Le batch layer recalcule en permanence et en totalité les batch views,
dédiées à des topologies de requêtes.
4 Ces batch views sont publiées et indexées sur le serving layer, dont
l’implémentation est une BD scalable.
5 Le speed layer est un composant de stream processing qui compense
pour les dernières heures de données non prises en charge par les
batchs.
6 Il met à jour, de manière incrémentale, les realtime views.
7 Les résultats des requêtes sont la combinaison des résultats en
provenance des realtime views et des batch views.
Minyar Sassi Hidri Technologies pour le Big Data 162 / 227
Lambda-architecture Architecture Lambda
Batch layer
I Stockage maître (on reconstruit tout à partir de c¸a) + Traitements Batch.
I Réceptionne les nouvelles données, les stockent (en APPEND-only).
I Précalcule des vues dédiées à des classes de requêtes.
I Besoins :
- Stockage scalable
- Haute distribution
- Support de la charge et du volume
- Tolérance aux pannes
- Système de réplication et distribution des données.
- Robustesse
- Surtout concernant les évolutions du schéma.
- Permettant tout type de traitement.
I Technologies
- Hadoop
- Avro : Système de sérialisation des données
- Hive
- ...
Minyar Sassi Hidri Technologies pour le Big Data 163 / 227
Lambda-architecture Architecture Lambda
Speed Layer
I Traite les mêmes données que celles envoyées dans le batch.
I Mise à jour des vues, en continu, de manière incrémentale, dès l’arrivée
d’une nouvelle donnée.
I Faible latence de traitement : ∼10ms à quelques secondes.
I Besoins
- Traitement en continu (stream processing).
- Tolérance aux pannes.
- Garanties de traitement si possible.
- Rejeu possible des messages en cas de perte d’un nœud.
I Technologies
- Kafka : collecte temps réel.
- Akka : message-driven applications.
- Storm : Stream processing.
- Spark : Micro-batch processing.
- ...
Minyar Sassi Hidri Technologies pour le Big Data 164 / 227
Lambda-architecture Architecture Lambda
Serving Layer : Batch Views
I Vues précalculées
I Besoins
- ´Ecritures massives
- Lectures indexées, accès aléatoire à faible temps de réponse
- Scalabilité et tolérance aux pannes
I Technologies
- Cassandra
- Hbase
- SploutSQL : requêtage SQL à faible latence
- ...
Minyar Sassi Hidri Technologies pour le Big Data 165 / 227
Lambda-architecture Architecture Lambda
Serving Layer : Realtime Views
I Vues ne contiennent que quelques heures de données.
I Vues supprimées dès que les batchs ont terminé.
I Vues doivent être requêtées de fac¸on intensive et performante.
I Temps de réponse court, fort débit de requête supporté.
I Besoins
- Support de fortes sollicitations en lecture et écriture (mise à jour
incrémentale).
- Scalabilité et tolérance aux pannes.
I Technologies
- Cassandra
- Hbase
- Redis
- ElasticSearch
Minyar Sassi Hidri Technologies pour le Big Data 166 / 227
Lambda-architecture Architecture Lambda
Serving Layer : Fusion
I Logique de fusion développée selon les vues et leur modélisation
I Peut s’avérer difficile.
- Expiration des vues.
- Recouvrement (intersection) possible entre les données batch et
temps-réel.
Minyar Sassi Hidri Technologies pour le Big Data 167 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL
1 Traitement des données
Traitement par lot : Batch processing
Traitement par streaming : Stream processing
2 Comment réconcilier les Big Data avec le temps réel ? Lambda-architecture
Big Data + Temps Réel : Pour quels use-cases ?
Le système Big Data à construire
Architecture Lambda
3 Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL
Apache Pig
Apache Hive
Spark
Minyar Sassi Hidri Technologies pour le Big Data 168 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL
Requêtage des données Hadoop
I Hadoop est principalement utilisé pour le monde batch.
I Le paradigme MapReduce sur Hadoop ne propose pas de
transformation ou de requêtage performant mais plutôt un traitement
d’une forte volumétrie de données.
I Cependant, la performance n’est pas à négliger dans certains cas :
- Lorsque la fenêtre de traitement des données devient serrée pour
fournir des données à jour.
- Des besoins de requêtages ponctuels par des analystes peuvent arriver
au travers d’outils type Pig ou Hive.
I Il devient nécessaire de fournir ces données dans un temps de
requêtage supportable à l’échelle Humaine.
Minyar Sassi Hidri Technologies pour le Big Data 169 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Présentation
I Pig est un autre outil associé à Hadoop.
I But : permettre de développer facilement et rapidement des
programmes MapReduce, sans avoir à développer en Java, Python ou
R.
I Sa syntaxe se rapproche du langage SQL et il est notamment utile
pour les programmeurs peu familiers avec Java, Python ou R ou qui
souhaitent simplement expérimenter avec la méthodologie
MapReduce ou Hadoop en général rapidement.
I Le langage de programmation de Pig est appelé Pig Latin.
Minyar Sassi Hidri Technologies pour le Big Data 170 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Utilisation
I Pig fonctionne comme un interpréteur de scripts exactement comme
Python.
I Il suffit d’écrire un script Pig, de l’exécuter avec l’interpréteur (le
programme en ligne de commande pig), et il exécutera le script dans
l’environnement Hadoop.
I Pour exécuter un script Pig Latin sur Hadoop, on utilisera la
commande :
pig -x mapreduce fichier.pig
I Il est également possible de l’exécuter en mode local. Dans ce mode,
Pig ignore complètement Hadoop et HDFS : il chargera ses fichiers
depuis le disque local, et stockera ses résultats au même endroit. Pour
ce faire, on utilise la commande :
pig -x local fichier.pig
I Lien d’installation :
https ://www.tutorialspoint.com/apache pig/apache pig installation.htm
Minyar Sassi Hidri Technologies pour le Big Data 171 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Utilisation
I Enfin - et toujours comme Python - il peut également s’utiliser en
mode interactif, où on tape ses instructions Pig Latin dans une invite
de commande.
I Pour ce faire, il suffit de le lancer avec la commande :
pig
I Dans ce mode, il détectera automatiquement si oui ou non Hadoop
est présent et se placera dans le mode d’exécution qui correspond (on
peut également forcer le mode à utiliser, toujours avec l’option -x).
I Par exemple :
pig -x local
ou encore :
pig -x mapreduce
Minyar Sassi Hidri Technologies pour le Big Data 172 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Fonctionnement
I Pig constitue une couche d’abstraction au dessus de Hadoop.
I Un script écrit en Pig Latin est converti en une ou plusieurs tâches
MapReduce exécutées sur Hadoop.
I Tout programme Pig est constitué des étapes suivantes :
- Chargement des données (LOAD).
- Transformations/traitements sur les données.
- Sauvegarde des résultats (DUMP/STORE).
I Ces trois étapes sont toutes parallélisées par le biais de tâches
MapReduce.
Minyar Sassi Hidri Technologies pour le Big Data 173 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Syntaxe
I Chaque ligne d’un script Pig doit être terminée par un point-virgule
’ ;’.
I Il est possible de commenter le code avec la syntaxe multi-lignes :
/* Ceci est
un commentaire sur
plusieurs lignes. */
I ou avec la syntaxe sur une ligne :
LOAD... −− Ceci est un commentaire sur une ligne.
Minyar Sassi Hidri Technologies pour le Big Data 174 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Types
I Pig supporte les types de données usuels suivants :
- int : un entier sur 32 bits.
- long : un entier sur 64 bits.
- float : un flottant sur 32 bits.
- double : un flottant sur 64 bits.
- chararray : une chaîne de caractères UTF-8.
- bytearray : une chaîne binaire.
- boolean : un booléen (true/false).
I Pig supporte également les trois types complexes suivants :
- tuple : une série de données. Par exemple : (12, John, 5.3)
- bag : un ensemble de tuples. Par exemple : {(12, John, 5.3), (8), (3.5, TRUE, Bob,
42)}
- map : une série de couples (clef ;valeur). Par exemple : [qui#22, le#3] (ici avec
deux couples clef ;valeur). Au sein d’un type map, chaque clef doit être unique.
Minyar Sassi Hidri Technologies pour le Big Data 175 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Types
I Un tuple peut tout à fait contenir d’autres tuples, ou encore des bags,
ou autres types simples et complexes.
I Par exemple :
({(1, 2), (3, John)}, 3, [qui#23])
- Un bag contenant lui-même deux tuples.
- Un entier de valeur 3.
- Un map contenant un seul couple (clef ;valeur).
Minyar Sassi Hidri Technologies pour le Big Data 176 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Chargement de données
I Les données d’entrée d’un programme pig seront typiquement chargées au
sein d’un bag.
I Pour charger des données depuis le système de fichier (HDFS en mode
MapReduce ou système de fichiers local en mode local), on utilise la
commande LOAD.
I Synopsis :
LOAD ’source’ [USING fonction] [AS schemas]
- où source est le nom du/des fichier(s) ou répertoire(s).
- fonction le nom d’une fonction d’importation.
- schemas un descriptif du format des données importées.
I Le paramètre source peut être :
- Un fichier unique, par exemple data.txt.
- Un répertoire (chargera tous les fichiers du répertoire), par exemple Data Input.
- Une expression complexe au même format que celles comprises par Hadoop/HDFS,
par exemple : Data Input/input-1-*.
Minyar Sassi Hidri Technologies pour le Big Data 177 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Chargement de données
I C’est le paramètre fonction qui permet d’indiquer la manière de
charger/segmenter les données d’une manière cohérente.
I Le paramètre désigne une classe Java en charge d’interpréter les
données depuis le système de fichier et d’en sortir des types Pig
cohérents (tuples / bag / map).
I Pig offre une série de fonctions déjà disponibles pour simplifier la vie
du programmeur. La plus couramment utilisée est la fonction
PigStorage.
I Syntaxe : PigStorage(”SEPARATEUR”)
I PigStorage va charger les données textuelles d’entrée sous la forme
d’un bag de tuples : un pour chaque ligne des données.
I Le séparateur indique, pour chaque ligne, le caractère unique de
séparation entre les différents champs des membre de chaque tuple.
Minyar Sassi Hidri Technologies pour le Big Data 178 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Chargement de données
I Imaginons qu’on ait le fichier d’entrée etudiants.txt suivant :
ADAM|Guillaume|15
BERCHANE|Rachid|18
BOULLAIRE|Alexandre|16
BOYER|Raphael|17
CHAMPOUSSIN|Luca|14
CODA|Stephen|15
I Si on exécute la ligne :
A = LOAD ’etudiants.txt’ USING PigStorage(’|’) ;
...alors A contiendra le bag de tuples suivant :
(ADAM,Guillaume,15)
(BERCHANE,Rachid,18)
(BOULLAIRE,Alexandre,16)
(BOYER,Raphael,17)
(CHAMPOUSSIN,Luca,14)
(CODA,Stephen,15)
(avec trois champs texte, texte et entier par tuple)
I Si en revanche, on utilise :
A = LOAD ’etudiants.txt’ USING PigStorage(’,’) ;
alors A contiendra le bag de tuples suivant :
(”ADAM|Guillaume|15”)
(”BERCHANE|Rachid|18”)
(”BOULLAIRE|Alexandre|16”)
(”BOYER|Raphael|17”)
(”CHAMPOUSSIN|Luca|14”)
(”CODA|Stephen|15”)
(avec un seul et unique champs texte par tuple)
Minyar Sassi Hidri Technologies pour le Big Data 179 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Chargement de données
I La fonction de chargement PigStorage permet ainsi facilement de charger un fichier
textuel avec des délimiteurs.
I Comme indiqué précédemment, le paramètre fonction est optionnel. Si on n’indique pas
de fonction, alors la fonction utilisée est PigStorage, avec un séparateur correspondant à
une tabulation.
I Ainsi, imaginons que notre fichier d’entrée etudiants.txt ait le format suivant :
ADAM[TAB]Guillaume[TAB]15
BERCHANE[TAB]Rachid[TAB]18
BOULLAIRE[TAB]Alexandre[TAB]16
BOYER[TAB]Raphael[TAB]17
CHAMPOUSSIN[TAB]Luca[TAB]14
CODA[TAB]Stephen[TAB]15
I Si on exécute :
A = LOAD ’etudiants.txt’ ;
...alors A contiendra le bag de tuples suivant :
(ADAM,Guillaume,15)
(BERCHANE,Rachid,18)
(BOULLAIRE,Alexandre,16)
(BOYER,Raphael,17)
(CHAMPOUSSIN,Luca,14)
(CODA,Stephen,15)
(avec trois champs texte, texte et entier par tuple)
Minyar Sassi Hidri Technologies pour le Big Data 180 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Chargement de données
I Il existe d’autres fonctions standards de chargement mises à
disposition par Pig, parmi lesquelles :
- TextLoader : aucun paramètre, charge simplement chaque ligne
de texte comme un tuple avec un seul champs - la ligne
elle-même.
- JsonLoader : permet de charger un fichier JSON de manière
structurée.
- AvroLoader : permet de charger un fichier binaire AVRO.
I Il est également possible de développer sa propre fonction de
chargement (sous la forme d’une classe Java compilée en .jar).
Minyar Sassi Hidri Technologies pour le Big Data 181 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Chargement de données
I Par défaut, une fois le bag des données d’entrée chargé, on pourra se
référer à différents membres de chaque tuple en utilisant la syntaxe :
$0, $1, $2, etc.
...pour référencer le premier, second, troisième, etc. membre de
chaque tuple.
I Par exemple, si on a chargé les données suivantes dans A :
(ADAM,Guillaume,15)
(BERCHANE,Rachid,18)
(BOULLAIRE,Alexandre,16)
...alors l’expression A.$2 désignera la note (15, 18,...) ; de même,
l’expression A.$0 désignera le nom de famille (ADAM,...).
Minyar Sassi Hidri Technologies pour le Big Data 182 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Chargement de données
I Le troisième argument optionnel de LOAD, schemas, permet de :
- Donner un nom aux champs des tuples chargés.
- Leur attribuer un type de données explicite.
- Spécifier un type de chargement différent (autre qu’un simple bag de tuples).
I Syntaxe :
(NOM1 :TYPE1, NOM2 :TYPE2,NOM3 :TYPE3...)
Le type est optionnel.
I Par exemple, avec les données d’entrée in.txt :
ADAM|Guillaume|15
BERCHANE|Rachid|18
BOULLAIRE|Alexandre|16
BOYER|Raphael|17
CHAMPOUSSIN|Luca|14
CODA|Stephen|15
I si on fait :
A = LOAD ’in.txt’ USING PigStorage(’|’) AS (nom, prenom, note) ;
Alors on pourra se référer par exemple à la note plus loin par le biais de la syntaxe A.note.
Minyar Sassi Hidri Technologies pour le Big Data 183 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Chargement de données
On pourrait également forcer le type de la note par le biais de :
A = LOAD ’in.txt’ USING PigStorage(’|’) AS (nom, prenom, note :float) ;
...et si on exécute par exemple :
A = LOAD ’in.txt’ USING PigStorage(’|’) AS (nom, prenom :int,
note :float) ;
...alors le champs prenom de notre fichier d’entrée ne sera pas chargé
(valeur vide), puisque Pig tente de l’interpréter comme un type int et qu’il
s’agit d’une chaîne de caractères dans les données d’entrée.
Minyar Sassi Hidri Technologies pour le Big Data 184 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Chargement de données
I Un exemple plus complexe. Données d’entrée in.txt :
(ADAM,Guillaume)|(15,15,12)
(BERCHANE,Rachid)|(18,15,20)
(BOULLAIRE,Alexandre)|(16,11,18)
I Si on fait :
A = LOAD ’in.txt’ Using PigStorage(’|’) AS
(infos :tuple(nom,prenom),notes :tuple(n1,n2,n3)) ;
Alors les données obtenues auront la forme :
((ADAM,Guillaume),(15,15,12))
((BERCHANE,Rachid),(18,15,20))
((BOULLAIRE,Alexandre),(16,11,18))
Minyar Sassi Hidri Technologies pour le Big Data 185 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Chargement de données
I Dans l’exemple précédent, en délimitant au sein du fichier source les
données sous la forme de deux champs tuples, on a pu indiquer à
PigStorage lors du chargement qu’on souhaitait qu’ils soient chargés
sous cette forme.
I On pourra alors se référer par exemple à A.infos.prenom, ou encore
A.notes.n1, etc.
I Il faut évidemment que la fonction de chargement supporte ce type de
schémas plus complexes.
I Il est recommander de toujours explicitement définir un schéma de
chargement avec tous les types et noms définis ; ceci d’une part pour
la lisibilité, d’autre part pour assurer la cohérence dans le type des
données d’entrée.
Minyar Sassi Hidri Technologies pour le Big Data 186 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Commande DESCRIBE
I On peut à tout moment obtenir (au sein du shell interactif) une
description de la composition d’un container par le biais de la
commande DESCRIBE.
I Exemple :
A = LOAD ’in.txt’ Using PigStorage(’|’) AS
(infos :tuple(nom,prenom),notes :tuple(n1,n2,n3)) ;
DESCRIBE A ;
Donnera à l’écran :
A : infos : (nom : bytearray,prenom : bytearray),notes : (n1 :
bytearray,n2 : bytearray,n3 : bytearray)
...c’est notamment utile lors de la rédaction/test d’un programme Pig.
Minyar Sassi Hidri Technologies pour le Big Data 187 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Sauvegarde de données : DUMP
I Deux commandes principales existent pour extraire des données
depuis Pig.
I La première est la commande DUMP.
I Syntaxe :
DUMP <nom du container> ;
I Exemple :
DUMP A ;
I Elle ne sauvegarde pas les données sur le système de fichier mais se
contente de les afficher à l’écran.
I Elle est utile lors de l’utilisation de Pig en mode interactif.
Note : Les sorties affichées plus haut (résultats de LOAD) au sein de
cette partie sont directement issues de la commande DUMP.
Minyar Sassi Hidri Technologies pour le Big Data 188 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Sauvegarde de données : STORE
I La seconde est la commande STORE, qui sauve véritablement des
données au sein du système de fichier (HDFS ou local selon le mode).
I Syntaxe :
STORE alias INTO ’repertoire’ [USING fonction] ;
alias représente le container à sauvegarder (par exemple A).
I Comme les données sont issues d’une tâche MapReduce, elles seront
stockées sous la forme de plusieurs fichiers part-r-*.
I En conséquence, repertoire indique le répertoire dans lequel on
souhaite que la série de fichiers résultants de la tâche/du stockage
soient écrits.
Minyar Sassi Hidri Technologies pour le Big Data 189 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Sauvegarde de données : STORE
I Là aussi, on peut spécifier une fonction indiquant la manière de
formater les données. Les mêmes fonctions que celles vu
précédemment sont utilisables (PigStorage, JsonStorage, AvroStorage
- mais pas par exemple TextLoader).
I fonction est ici aussi optionnel ; la aussi, si on ne precise pas de
fonction, c’est PigStorage(’t’) qui est utilisée.
I STORE ne supporte pas de schéma ; à la place, si un schéma est
nécessaire (par exemple pour du Json), c’est généralement le
paramètre de la fonction de stockage qui est utilisé.
I Dans le cas du JSON, par défaut, Pig utilisera les noms de colonnes
directement issues du schéma de l’alias concerné ; il stocke par ailleurs
le schéma sous la forme d’un fichier .pig schema dans le répertoire. Si
on recharge les données avec un JsonStorage, le schéma sera
automatiquement importé par la fonction.
Minyar Sassi Hidri Technologies pour le Big Data 190 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Exemples
I Fichier d’entrée in.txt :
ADAM|Guillaume|15
BERCHANE|Rachid|18
BOULLAIRE|Alexandre|16
BOYER|Raphael|17
I Chargé dans l’alias A avec :
A = LOAD ’in.txt’ USING PigStorage(’|’)  AS (nom :chararray, prenom :chararray,
note :float) ;
I Sortie de DUMP A ;
(ADAM,Guillaume,15)
(BERCHANE,Rachid,18)
(BOULLAIRE,Alexandre,16)
(BOYER,Raphael,17)
I Sortie de DESCRIBE A ;
A : nom :chararray,prenom :chararray,note :float
I Si on utilise : STORE A INTO ’results’ USING PigStorage(’,’) ;
Un répertoire results/ sera créé, contenant ici un fichier unique part-r-00000 avec pour
contenu :
ADAM,Guillaume,15
BERCHANE,Rachid,18
BOULLAIRE,Alexandre,16
BOYER,Raphael,17
I Si les données avaient été plus conséquentes, on aurait pu avoir de nombreux fichiers
part-r-00000, part-r-00001, etc.
Minyar Sassi Hidri Technologies pour le Big Data 191 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Exemples
I Si on utilise :
STORE A INTO ’results’ USING JsonStorage() ;
Un répertoire results/ sera crée, contenant ici un fichier unique
part-r-00000 avec pour contenu :
{”nom” :”ADAM”,”prenom” :”Guillaume”,”note” :15.0}
{”nom” :”BERCHANE”,”prenom” :”Rachid”,”note” :18.0}
{”nom” :”BOULLAIRE”,”prenom” :”Alexandre”,”note” :16.0}
{”nom” :”BOYER”,”prenom” :”Raphael”,”note” :17.0}
I Par ailleurs, Pig a également crée un fichier .pig schema ; si on
recharge plus tard les données avec JsonLoader (le pendant
chargement de JsonStorage), le schéma sera automatiquement déduit.
Minyar Sassi Hidri Technologies pour le Big Data 192 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Autres commandes
I Le shell interactif de Pig offre quelques commandes pratiques pour le
développeur.
I L’une de ces commandes est cat : comme la commande cat Unix, elle
affiche le contenu d’un fichier.
I En revanche, dans le cadre de Pig, elle est étendue au fonctionnement
Hadoop ; si on fait cat [REPERTOIRE] la commande affichera
automatiquement le contenu concaténé de tous les fichiers du répertoire.
I Autres commandes uniquement disponibles en mode interactif :
- help : affiche une aide.
- sh [COMMANDE] : exécute une commande shell.
- exec [FICHIER.PIG] : exécute le script pig indique.
- history : affiche un historique de toutes les commandes utilisées.
- ls, mkdir, rm, etc. : équivalentes à Unix.
- ...
Minyar Sassi Hidri Technologies pour le Big Data 193 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Traitement de données
I On a vu jusqu’ici comment charger des données depuis le système de
fichiers local/HDFS au sein d’un alias Pig, et comment sauvegarder
un alias au sein du système de fichier ou simplement l’afficher à
l’écran en mode interactif (DUMP).
I On va maintenant voir comment manipuler les données, c’est à dire
effectuer un traitement sur nos données d’entrée.
I Toutes les fonctions et opérateurs de Pig ne sont pas décrites ici ;
seule une sélection large mais non exhaustive est décrite ; se référer à
la documentation de Pig pour plus d’informations.
Minyar Sassi Hidri Technologies pour le Big Data 194 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
L’opérateur FILTER
I L’opérateur FILTER permet de filtrer les éléments d’un alias selon une
ou plusieurs conditions.
I Syntaxe :
DEST = FILTER SOURCE BY EXPRESSION ;
I Il s’agit d’un équivalent au WHERE de SQL.
I On pourra ainsi faire par exemple :
B = FILTER A BY note > 10 ;
Ou encore :
B = FILTER A BY note > 10 AND ((annee naissance+age)<2014) ;
Minyar Sassi Hidri Technologies pour le Big Data 195 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
L’opérateur ORDER
I L’opérateur ORDER permet de trier les éléments selon une condition.
C’est l’équivalent du ORDER BY de SQL.
I Syntaxe :
DEST = ORDER SOURCE BY FIELD [ASC|DESC] ;
I On pourra ainsi faire par exemple :
B = ORDER A BY note DESC ;
Ou encore :
B = ORDER A BY note DESC, nom ASC ;
Minyar Sassi Hidri Technologies pour le Big Data 196 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
L’opérateur GROUP
I L’opérateur GROUP permet de grouper les tuples selon un champs.
I Il génère des tuples constitues de deux champs :
- Le premier, nommé group, est un champs simple, contenant la valeur unique du
champs utilisé lors de l’appel à GROUP.
- Le second, qui porte le nom de l’alias sur lequel a été appliqué GROUP, est un bag
qui contient une série de tuples : tous ceux pour lesquels la valeur en question a été
rencontrée.
I Syntaxe :
DEST = GROUP SOURCE BY FIELD ;
I Si on a :
ADAM,Guillaume,15
BERCHANE,Rachid,15
BOULLAIRE,Alexandre,16
DUMP A donne :
(ADAM,Guillaume,15)
(BERCHANE,Rachid,15)
(BOULLAIRE,Alexandre,16)
I On exécute : B = GROUP A BY note ;
I On obtient :
DUMP B ;
(15,{(BERCHANE,Rachid,15),(ADAM,Guillaume,15)})
(16,{(BOULLAIRE,Alexandre,16)})
DESCRIBE B ;
B : {group :float,A :{(nom :chararray,prenom :chararray,note :float)}}
Minyar Sassi Hidri Technologies pour le Big Data 197 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Opérateur FOREACH...GENERATE
I L’opérateur FOREACH...GENERATE permet d’itérer chacun des tuples du bag de l’alias
concerné, et de générer d’autres tuples pour chacun d’entre eux.
I Syntaxe :
DEST = FOREACH SOURCE GENERATE EXPRESSION ;
I Au sein de l’expression, on peut générer des bags, des tuples, des maps, etc. et appeler
des fonctions à la volée.
I On peut également nommer des champs générés de cette manière au sein de l’appel à
GENERATE.
I Si on a :
ADAM,Guillaume,15
BERCHANE,Rachid,15
BOULLAIRE,Alexandre,16
DUMP A donne :
(ADAM,Guillaume,15)
(BERCHANE,Rachid,15)
(BOULLAIRE,Alexandre,16)
I On exécute : B = FOREACH A GENERATE note ;
I Et on obtient :
DUMP B ;
(15)
(15)
(16)
DESCRIBE B.
B : {note :float}
Minyar Sassi Hidri Technologies pour le Big Data 198 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Opérateur FOREACH...GENERATE
I On exécute : B = FOREACH A GENERATE (nom,prenom) AS infos,
note ;
I On obtient :
DUMP B ;
((ADAM,Guillaume),15.0)
((BERCHANE,Rachid),15.0)
((BOULLAIRE,Alexandre),16.0)
DESCRIBE B.
B : {infos :(nom :chararray,prenom :chararray),note :float}
Minyar Sassi Hidri Technologies pour le Big Data 199 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Opérateur FOREACH...GENERATE
I Il est également possible d’imbriquer des traitement plus complexe au sein de cet
opérateur, par exemple pour effectuer des traitements sur les tuples d’un bag.
I Syntaxe :
DEST = FOREACH SOURCE {
OPERATION 1 ;
OPERATION 2 ;
...
} ;
I Imaginons par exemple qu’on ait des données sous la forme :
A : {infos : (nom : bytearray,prenom : bytearray), 
notes : (n1 : bytearray,n2 : bytearray,n3 : bytearray)}
...on pourrait alors faire :
B = FOREACH A {
C = (notes.n1+notes.n2+notes.n3)/3.0 ;
GENERATE infos,C as moyenne ;
} ;
Pour générer la moyenne des notes tout en conservant les noms & prénoms des élèves
contenus dans l’alias A.
Minyar Sassi Hidri Technologies pour le Big Data 200 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
L’opérateur FLATTEN
I L’opérateur FLATTEN permet de déplier un ensemble de tuples et bags
pour les transformer en de simples tuples.
I Par exemple, si on a une liste de tuples dans un alias B au format suivant :
(15,{(BERCHANE,Rachid,15),(ADAM,Guillaume,15)})
(16,{(BOULLAIRE,Alexandre,16)})
B :{group :float,A :{(nom :chararray,prenom :chararray,note :float)}}
I Et qu’on exécute :
C = FOREACH B GENERATE FLATTEN(A) ;
I On obtiendra :
(BERCHANE,Rachid,15.0)
(ADAM,Guillaume,15.0)
(BOULLAIRE,Alexandre,16.0)
Minyar Sassi Hidri Technologies pour le Big Data 201 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Autres opérateurs
I LIMIT : récupérer les N premiers tuples d’un alias.
I SPLIT : générer plusieurs alias à partir d’un alias ; selon des
expressions conditionnelles.
I CROSS : mélanger les tuples de deux alias.
I DISTINCT : éliminer les tuples identiques au sein d’un alias.
I SAMPLE : obtenir une sous-sélection aléatoire de tuples depuis un
alias (par exemple, récupérer 10% des tuples d’un alias de manière
aléatoire).
I ...et d’autres (se référer à la documentation officielle de Pig pour plus
d’informations).
Minyar Sassi Hidri Technologies pour le Big Data 202 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Fonctions - Chaînes de caractères
I Pig propose, en standard, de nombreuses fonctions pour la
manipulation des types chaîne de caractères.
I Quelques exemples :
- TOKENIZE : découpe les différents mots d’une ligne. Génère un
bag contenant un tuple pour chacun des mots.
Par exemple, A :
(”exemple de phrase”)
(”autre exemple”)
B = FOREACH A GENERATE TOKENIZE($0) ;
DUMP B :
({(”exemple”), (”de”), (”phrase”)})
({(”autre”),(”exemple”)})
Minyar Sassi Hidri Technologies pour le Big Data 203 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Fonctions - Chaînes de caractères
I Autres exemples :
- SIZE : renvoie la taille d’une chaîne de caractères.
- SUBSTRING : permet de récupérer une sous-chaîne de
caractères.
- STRSPLIT : permet de découper une chaîne de caractères a
partir d’une expression régulière.
- LOWER : converti une chaîne en minuscules.
- REPLACE : remplacement dans une chaîne (supporte la aussi
les regexp).
- et d’autres (la aussi, consulter la documentation).
Minyar Sassi Hidri Technologies pour le Big Data 204 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Fonctions - Mathématiques
I De même, Pig propose un certain nombre de fonctions pour la
manipulation des nombres.
I Quelques exemples :
- ABS : renvoie la valeur absolue d’un nombre.
- COS/SIN/TAN : cosinus/sinus/tangente.
- RANDOM : génère un flottant aléatoire entre 0 et 1.
- ROUND : génère l’arrondi d’un nombre.
- et d’autres (même remarque).
Minyar Sassi Hidri Technologies pour le Big Data 205 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Fonctions - Autres
I Pig propose enfin quelques autres fonctions utiles :
- COUNT(bag) : renvoie le nombre de tuples contenus au sein
d’un bag.
- CONCAT(f1,f2,f3,c) : concatène une série de champs d’un
tuple. Supporte la concatenation des nombres (leur
representation textuelle).
- SUBSTRACT(b1,b2) : renvoie un bag constitué des éléments
présents dans le bag b1 mais absents du bag b2.
- SUM(bag) : renvoie la somme des éléments numériques
contenus au sein d’un bag.
- et d’autres (même remarque).
Minyar Sassi Hidri Technologies pour le Big Data 206 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Exemple - Compteur de mots, version Pig
I On reprend l’exemple du compteur d’occurrences de mots.
I Les données d’entrée, au sein d’un fichier WordCount.txt :
Celui qui rêvait du travail
Celui qui ny rêvait pas
Tous deux adoraient la belle
Pays des tunisiens
I On commence par charger les données :
A = LOAD ’WordCount.txt’ USING TextLoader AS ligne :chararray ;
I Après chargement :
DUMP A :
(Celui qui rêvait du travail)
(Celui qui ny rêvait pas)
(Tous deux adoraient la belle)
(Pays des tunisiens)
DESCRIBE A :
A : {ligne :chararray}
Minyar Sassi Hidri Technologies pour le Big Data 207 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Exemple - Compteur de mots, version Pig
I On exécute ensuite :
B = FOREACH A GENERATE TOKENIZE(LOWER(ligne)) AS
mots ;
...ce qui aura pour effet, pour chaque ligne, de la convertir en
minuscules, puis de générer un bag de tuples : un pour chacun des
mots de la ligne en minuscules (fonction TOKENIZE).
I On donne également un nom au bag en question : mots.
I Après exécution :
DUMP B :
({(celui),(qui),(rêvait),(du),(travail)})
({(celui),(qui),(ny),(rêvait),(pas)})
({(tous),(deux),(adoraient),(la),(belle)})
({(pays),(des),(tunisiens)})
DESCRIBE B :
B :{mots :{tuple of tokens : (token :chararray)}}
Minyar Sassi Hidri Technologies pour le Big Data 208 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Exemple - Compteur de mots, version Pig
I On exécute ensuite :
C = FOREACH B GENERATE FLATTEN(mots) AS mot ;
...ce qui aura pour effet, pour chaque tuple, de déplier le bag contenant chacun des mots
et de générer pour chacun des tuples contenu dans ce bag un tuple indépendant.
I On donne également un nom à ces tuples désormais indépendants : mot.
I Après exécution :
DUMP C :
(celui)
(qui)
(rêvait)
(du)
(travail)
(celui)
(qui)
(ny)
(rêvait)
(pas)
(tous) ...
DESCRIBE C :
C :{mot :chararray}
Minyar Sassi Hidri Technologies pour le Big Data 209 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Exemple - Compteur de mots, version Pig
I On exécute ensuite :
D = GROUP C BY mot ;
...ce qui aura pour effet de regrouper les tuples par mot commun.
I On rappelle que l’opérateur GROUP va générer un tuple constitue d’un premier membre
group qui contient le mot unique en question, et d’un second membre C de type bag qui
contient tous les tuples correspondant à cette valeur.
I Après exécution :
DUMP D :
(au,{(au)})
(la,{(la)})
(ny,{(ny)})
(qui,{(qui),(qui)})
(tous,{(tous)})
(belle,{(belle)})
(celui,{(celui),(celui)})
(rêvait,{(rêvait),(rêvait)})
...
DESCRIBE D :
D :{group :chararray,C :{(mot :chararray)}}
Minyar Sassi Hidri Technologies pour le Big Data 210 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Exemple - Compteur de mots, version Pig
I On exécute enfin :
E = FOREACH D GENERATE group AS mot, COUNT(C) as occurrences ;
...ce qui aura pour effet de parcourir l’alias D et, pour chaque tuple, de récupérer le
premier membre group et le nombre de tuples du second membre de type bag C.
I On génère un nouveau tuple à partir de ces deux informations : on donne au premier
champs le nom Ąmot, et au second le nom occurences.
I Après exécution :
DUMP E :
(au,1)
(la,1)
(qui,2)
(belle,1)
(celui,2)
(rêvait,2)
(tunisiens,1)
(pays,1)
...
DESCRIBE E :
E :{mot :chararray,occurrences :long}
Minyar Sassi Hidri Technologies pour le Big Data 211 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Exemple - Compteur de mots, version Pig
I Il reste enfin à sauvegarder les données :
STORE E INTO ’/results’
I Puisqu’on ne precise pas de fonction de stockage, Pig utilisera par défaut
PigStorage(’’) : il devrait écrire chacun des tuple sur une ligne textuelle, en séparant
chacun des champs par une tabulation.
I La méthode générera un repertoire /results (sur HDFS ou le système de fichiers local), qui
contiendra une série de fichier part-r-XXXXX, contenant les différents tuples de E.
I Contenu du fichier /results/part-r-00000 :
du 1
la 1
ny 1
des 1
pas 1
qui 2
travail 1
deux 1
tous 1
belle 1
celui 2
rêvait 2
tunisiens 1
adoraient 1
pays 1
Minyar Sassi Hidri Technologies pour le Big Data 212 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
´Etendre Pig
I On l’a vu, Pig propose de nombreuses fonctions en standard.
I En revanche, dans beaucoup de cas complexes, on a besoin
d’effectuer des traitements qui sont impossible avec les seules
fonctions standard de Pig.
I Pour pallier à ce manque, Pig implémente le concept de User Defined
Functions. Il s’agit d’un mécanisme permettant d’étendre Pig.
I Le fonctionnement est simple : il suffit de développer la fonction dont
on a besoin en Java (en implémentant certaines interfaces Pig), et
une fois compilées, elles deviennent disponibles au sein de tout
programme Pig chargeant le .jar correspondant.
I Il est également possible de développer ces fonctions en Python /
autres langages (par un mécanisme similaire à Streaming pour
Hadoop).
Minyar Sassi Hidri Technologies pour le Big Data 213 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
User Defined Functions
I Pour charger un .jar additionnel depuis un programme Pig, on utilise
la commande REGISTER.
I Par exemple : REGISTER udf.jar ;(sans guillemets autour du nom du
.jar)
I On peut ensuite simplement invoquer la fonction à partir de son
classpath directement depuis le langage Pig Latin. Par exemple :
B = FOREACH A GENERATE org.mbds.udf.UpperCase(nom) ;
(en supposant qu’une classe org.mbds.udf.UpperCase existe au sein
du fichier udf.jar d’exemple)
Minyar Sassi Hidri Technologies pour le Big Data 214 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
User Defined Functions - Exemple
I Exemple : on ne peut pas sans fonction additionnelle implémenter un
programme Pig pour résoudre le problème des anagrammes. En effet,
il n’y a pas de moyen depuis les fonctions standard Pig de générer la
clef (les lettres du mot, classées par ordre alphabétique).
I En conséquence, on imagine qu’on va rédiger une fonction Pig
additionnelle pour implémenter cette opération : elle prendra en
entrée une chaîne de caractères, et fournira en sortie la même chaîne
avec les lettres ordonnées alphabétiquement.
I On décide d’appeler cette classe SortLetters au sein d’un package :
org.mbds.hadoop.pigudfs
Minyar Sassi Hidri Technologies pour le Big Data 215 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
User Defined Functions - Exemple
Minyar Sassi Hidri Technologies pour le Big Data 216 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
User Defined Functions - Exemple
I Une fois ce code compilé dans un .jar, par exemple un fichier
mbds udfs.jar, on pourra faire au sein de tout programme Pig :
REGISTER mbds udfs.jar ;
I Et si on utilise :
org.mbds.hadoop.pigudfs.SortLetter(field)
...alors on recevra en valeur de retour la valeur de la chaîne field, avec
les lettres triées alphabétiquement.
Minyar Sassi Hidri Technologies pour le Big Data 217 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig
Conclusion
I On a vu que Pig constituait un outil puissant et accessible pour la
rédaction et l’exécution de programmes MapReduce via Hadoop.
I Il est par ailleurs infiniment extensible via le mécanisme des User
Defined Functions.
I Si beaucoup d’opérateurs et de fonctions standards de Pig ont été
abordes, il y en a beaucoup d’autres : pour approfondir le sujet, se
référer à la documentation officielle de Pig (+ guide de lectures
additionnelles du cours).
Minyar Sassi Hidri Technologies pour le Big Data 218 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Hive
D’où vient Hive ?
I D’où vient Hive ?
- Chez Facebook manipulation d’une quantité monstre des données chaque jour.
- Avoir des alternatives à :
- MapReduce
- Pig
- Rentabiliser les ingénieurs qui connaissent et maîtrisent SQL !
I C’est quoi Hive ?
- Une infrastructure pour Entrepôt de Données.
⇒ on peut tout simplement le considérer comme un Data Warehouse.
I Comment c¸a marche ?
- Hive a pour fondation Hadoop.
- Hive stocke ses données dans HDFS.
- Hive compile des requêtes SQL en jobs. MapReduce et les exécute sur le cluster.
Hadoop.
Minyar Sassi Hidri Technologies pour le Big Data 219 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Hive
Java versus Hive : Calcul du nombres des occurrences de
mots
Minyar Sassi Hidri Technologies pour le Big Data 220 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Hive
Java versus Hive : Calcul du nombres des occurrences de
mots
Minyar Sassi Hidri Technologies pour le Big Data 221 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Hive
D’où vient Hive ?
I D’où vient Hive ?
- Chez Facebook manipulation d’une quantité monstre des données chaque jour.
- Avoir des alternatives à :
- MapReduce
- Pig
- Rentabiliser les ingénieurs qui connaissent et maîtrisent SQL !
I C’est quoi Hive ?
- Une infrastructure pour Entrepôt de Données.
⇒ on peut tout simplement le considérer comme un Data Warehouse.
I Comment c¸a marche ?
- Hive a pour fondation Hadoop.
- Hive structure les données tables, colonnes, lignes.
- Hive stocke les données dans HDFS.
- Hive compile les requêtes SQL en Job Map/Reduce.
- Hive propose un langage de requêtes SQL HiveQL LDD et LMD.
Minyar Sassi Hidri Technologies pour le Big Data 222 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Hive
Hive : Comment ça marche
Minyar Sassi Hidri Technologies pour le Big Data 223 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Spark
Hadoop : Qu’est que Spark ?
I Apache Spark is a powerful open source processing engine for Hadoop data
built around speed, ease of use, and sophisticated analytics. It was originally
developed in 2009 in UC Berkeley’s AMPLab, and open sourced in 2010.
I Ce n’est pas une version modifiée de Hadoop.
I C’est un moteur MapReduce plus évolué, plus rapide.
- Utilisation de la mémoire pour optimiser les traitements.
- Des API’s pour faciliter et optimiser les étapes d’analyses.
- Permettre le traitement temps réel des données.
I Compatible avec le système de stockage de Hadoop (HDFS, Hive,
SequenceFiles...)
Minyar Sassi Hidri Technologies pour le Big Data 224 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Spark
Hadoop : Spark, plus rapide
I RDD’s (Resilient Distributed
DataSet)
- Une collection d’objets
distribués, mise en
cache en mémoire au
travers du cluster.
- Une API pour
manipuler ces objets
Operators.
- Système de fail over
automatique.
Minyar Sassi Hidri Technologies pour le Big Data 225 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Spark
Hadoop : Spark, facile à utiliser.
I Une liste d’Operators pour faciliter la manipulation des données au travers
des RDD’S.
- Map, filter, groupBy, sort, join, leftOuterJoin, ritghtOuterJoin,
reduce, count, reduceByKey, groupByKey, first, union, cross, sample,
cogroup, take, partionBy, pipe, save...
I Compatible avec les langages de programmation fonctionnel Scala, Python,
R et Java.
Minyar Sassi Hidri Technologies pour le Big Data 226 / 227
Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Spark
Hadoop : Spark, un framework analytique
Shark : Moteur de requête SQL, basé sur le coeur de Spark (in memory), il permet
d’exécuter des requêtes hive sans modification 100x plus rapidement.
MLLib : Library d’algorithmes d’analyses de données (data mining), scalable et optimisé
(limite des interactions, RDD’s), k-means, ALS, L2− > L1...
Spark Streaming : `A opposer aux traitements batch, mise à jour dŠun état
dynamiquement, piloté par des évènements sur les données event processing (Filtre de
Spam, analyse de click, reporting temps réel...)
Minyar Sassi Hidri Technologies pour le Big Data 227 / 227

Technologies pour le Big Data

  • 1.
    Technologies pour leBig Data par Minyar Sassi Hidri Département Technologies de l’Information et de la Communication Ecole Nationale d’Ingénieurs de Tunis Novembre 2016 Minyar Sassi Hidri Technologies pour le Big Data 1 / 227
  • 2.
    Plan 1 Chapitre 1: Introduction au Big Data 2 Chapitre 2 : Hadoop, MapReduce et le Big Data 3 Chapitre 3 : Programmation MapReduce sous Hadoop 4 Chapitre 4 : Traitement de données et requêtage sous Hadoop Minyar Sassi Hidri Technologies pour le Big Data 2 / 227
  • 3.
    Chapitre 1 -Introduction au Big Data 1 Big Data : Faits, Intérêts, Sources et Challenges 2 Qu’est-ce que le Big Data ? 3 Problématique et termes clés 4 Forces majeurs 5 Importance et défis du Big Data 6 Big Data et décisionnel 7 Approche traditionnelle versus approche Big Data 8 Mise en place du Big Data : des chantiers de grande ampleur 9 Enjeux stratégiques 10 Enjeux technologiques Minyar Sassi Hidri Technologies pour le Big Data 3 / 227
  • 4.
    Big Data :Faits, Intérêts, Sources et Challenges 1 Big Data : Faits, Intérêts, Sources et Challenges 2 Qu’est-ce que le Big Data ? Historique & contexte Définition Est-ce une innovation ? Vocabulaire 3 Problématique et termes clés 4 Forces majeurs 5 Importance et défis du Big Data 6 Big Data et décisionnel 7 Approche traditionnelle versus approche Big Data Approche traditionnelle Approche Big Data Fusion de deux approches 8 Mise en place du Big Data : des chantiers de grande ampleur 9 Enjeux stratégiques Big Data : pour qui, pour quoi ? Impacts du Big Data dans l’entreprise 10 Enjeux technologiques Minyar Sassi Hidri Technologies pour le Big Data 4 / 227
  • 5.
    Big Data :Faits, Intérêts, Sources et Challenges Big Data : Faits Big Data : Faits Source : IBM Minyar Sassi Hidri Technologies pour le Big Data 5 / 227
  • 6.
    Big Data :Faits, Intérêts, Sources et Challenges Big Data : Faits Big Data : Faits I Chaque jour, nous générons 2.5 trillions d’octets de données. I 90% des données dans le monde ont été créées au cours des deux dernières années. I Sources : - Capteurs utilisés pour collecter les informations climatiques. - Messages sur les médias sociaux. - Images numériques et vidéos publiées en ligne. - Enregistrements transactionnels d’achat en ligne. - Signaux GPS de téléphones mobiles. - ... Minyar Sassi Hidri Technologies pour le Big Data 6 / 227
  • 7.
    Big Data :Faits, Intérêts, Sources et Challenges Big Data : Faits Big Data : Faits I Chaque jour, nous générons 2.5 trillions d’octets de données. I 90% des données dans le monde ont été créées au cours des deux dernières années. I Sources : - Capteurs utilisés pour collecter les informations climatiques. - Messages sur les médias sociaux. - Images numériques et vidéos publiées en ligne. - Enregistrements transactionnels d’achat en ligne. - Signaux GPS de téléphones mobiles. - ... I Chiffres clés - Plus de 2 milliards de vidéos regardées sur Youtube chaque jour et 220 milliards de recherche sur Google chaque mois. - 30 milliards de contenus statut, photo, vidéo, événement, etc. sont ajoutés sur Face- book par mois par plus de 600 millions d’utilisateurs actifs. - Le nombre d’appareils connectés à Internet a dépassé le nombre d’humains en 2008. - La compagnie de Social Games traite 1 Petabyte (1 million de GB) de données chaque jour. - Le marché du Big Data et des Big Analytics (ou broyage de données) pourraient représenter près de 250 milliards de dollars sur 4 ans. Minyar Sassi Hidri Technologies pour le Big Data 6 / 227
  • 8.
    Big Data :Faits, Intérêts, Sources et Challenges Big Data : Intérêts Big Data : Intérêts I 1/3 - Chefs d’entreprise prennent fréquemment des décisions basées sur des informations en lesquelles ils n’ont pas confiance, ou qu’ils n’ont pas. I 1/2 - Chefs d’entreprise disent qu’ils n’ont pas accès aux informations dont ils ont besoin pour faire leur travail. I 83% - Des DSI (Directeurs des SI) citent : l’informatique décisionnelle et analytique comme faisant partie de leurs plans pour améliorer leur compétitivité. I 60% - Des PDG ont besoin d’améliorer la capture et la compréhension des informations pour prendre des décisions plus rapidement. Minyar Sassi Hidri Technologies pour le Big Data 7 / 227
  • 9.
    Big Data :Faits, Intérêts, Sources et Challenges Big Data : Intérêts Big Data : Sources (1) I Sources multiples : sites, Bases de Données, téléphones, serveurs : - Détecter les sentiments et les réactions des clients. Détecter les conditions critiques ou potentiellement mortelles dans les hôpitaux, et à temps pour intervenir. - Prédire des modèles météorologiques pour planifier l’usage optimal des éoliennes. - Prendre des décisions risquées basées sur des données transactionnelles en temps réel. - Identifier les criminels et les menaces à partir de vidéos, sons et flux de données. - ´Etudier les réactions des étudiants pendant un cours, prédire ceux qui vont réussir, d’après les statistiques et modèles réunis au long des années (domaine Big Data in Education). Minyar Sassi Hidri Technologies pour le Big Data 8 / 227
  • 10.
    Big Data :Faits, Intérêts, Sources et Challenges Big Data : Sources Big Data : Sources (2) I Les données massives sont le résultat de la rencontre de trois éléments essentiels qui sont : - Internet. - Les réseaux sociaux. - Les appareils intelligents : les ordinateurs, les tablettes, les smartphones, les objets connectés... - L’Internet permet la transmission de l’information quelle que soit sa forme sur les appareils intelligents : Appareil intelligent : création de données. Utilisateur des réseaux sociaux : consommateur. Internet : vecteur de transmission. Minyar Sassi Hidri Technologies pour le Big Data 9 / 227
  • 11.
    Big Data :Faits, Intérêts, Sources et Challenges Big Data : Challenges Big Data : Challenges ? Réunir un grand volume de données variées pour trouver de nouvelles idées. ? Difficulté pour sauvegarder toutes ces données. ? Difficulté pour traiter ces données et les utiliser. ? Les données sont créées rapidement. Minyar Sassi Hidri Technologies pour le Big Data 10 / 227
  • 12.
    Qu’est-ce que leBig Data ? 1 Big Data : Faits, Intérêts, Sources et Challenges 2 Qu’est-ce que le Big Data ? Historique & contexte Définition Est-ce une innovation ? Vocabulaire 3 Problématique et termes clés 4 Forces majeurs 5 Importance et défis du Big Data 6 Big Data et décisionnel 7 Approche traditionnelle versus approche Big Data Approche traditionnelle Approche Big Data Fusion de deux approches 8 Mise en place du Big Data : des chantiers de grande ampleur 9 Enjeux stratégiques Big Data : pour qui, pour quoi ? Impacts du Big Data dans l’entreprise 10 Enjeux technologiques Minyar Sassi Hidri Technologies pour le Big Data 11 / 227
  • 13.
    Qu’est-ce que leBig Data ? Historique & contexte Historique & contexte I L’évolution du SI amène les entreprises à traiter de plus en plus de données issues de sources toujours plus variées. I Les prévisions de taux de croissance des vo- lumes de données trai- tées dépassent les limites des technologies tradition- nelles. I On parle de Petaoctet (billiard d’octets) (ou Pe- tabyte) voir de Zettaoc- tet (Trilliard d’octets) (ou Zettabyte). ⇒ Quelle solution pour exploiter ces données ? Minyar Sassi Hidri Technologies pour le Big Data 12 / 227
  • 14.
    Qu’est-ce que leBig Data ? Définition Définition I Big Data : Exploration de très vastes ensembles de données pour obtenir des renseignements utilisables. I Le terme Big Data se réfère aux technologies qui permettent aux entreprises d’analyser rapidement un volume de données très important et d’obtenir une vue synoptique. I En mixant intégration de stockage, analyse prédictive et applications, le Big Data permet de gagner en temps, en efficacité et en qualité dans l’interpré- tation de données. I Les objectifs de ces solutions d’intégration et de traitements des données sont de traiter un volume très important de données aussi bien structurées que non structurées, se trouvant sur des terminaux variés (PC, smartphones, tablettes, objets communicants...), produites ou non en temps réel depuis n’importe quelle zone géographique dans le monde. ⇒ Le Big Data sera un outil majeur à la fois pour la prise de décisions et l’optimisation de la compétitivité au sein des entreprises ? Minyar Sassi Hidri Technologies pour le Big Data 13 / 227
  • 15.
    Qu’est-ce que leBig Data ? Définition Définition : Autres notions Autour du Big Data, on trouve également les termes : I Open Data : Une donnée ouverte est une donnée qui peut être librement utilisée, réutilisée et redistribuée par quiconque. Ce qu’ouvert signifie ⇒ L’in- teropérabilité. - Capacité de divers systèmes et organisations à travailler ensemble (inter-opérer). Dans ce cas, c’est la capacité d’interopérer - ou entremêler - des ensembles de données différents. I Little Data : Parfois utilisée pour permettre aux entreprises qui n’auraient pas les 3V pour utiliser les technologies Big Data. I Smart Data : La Smart Data permet de se focaliser uniquement sur les données utiles. Nouvelle expression synonyme de Business Intelligence (Infor- matique décisionnelle). - En 2013, le Big Data s’est retrouvé au cœur de toutes les conversations. Cependant, le Big Data c’est un gros volume de données parfois inexploitable et peu pertinent. - Toutes les données ne sont pas bonnes à prendre et demandent beaucoup de temps à exploiter. Attention à ne pas être confronté au final au Bad Data ! Minyar Sassi Hidri Technologies pour le Big Data 14 / 227
  • 16.
    Qu’est-ce que leBig Data ? Est-ce une innovation ? Big Data : Est-ce une innovation ? I L’explosion des volumes des données nécessite une innovation en terme de : - Acceleration matérielle : Abandon des disques durs au profit des mémoires dy- namiques DRAM (Dynamic Random Access Memory : mémoire vive dynamique) ou flash. ⇒ Meilleur benefice des processeurs multicœurs. I Bases de données d’analyse massivement parallèle (MPP) : Ces bases de données conformes SQL sont conc¸ues pour répartir le traitement des données sur plusieurs machines. I Modèle Map-Reduce, Hadoop et autres approches NoSQL : Ces approches permettent d’accéder aux données via des langages de programmation sans utiliser les interfaces basées sur SQL et permettent de répartir les données sur plusieurs machines distinctes. Minyar Sassi Hidri Technologies pour le Big Data 15 / 227
  • 17.
    Qu’est-ce que leBig Data ? Vocabulaire Vocabulaire I Not Only SQL / Bases sans schéma : Catégorie de systèmes de gestion de base de données (SGBD) qui n’est plus fondée sur l’architecture classique des bases relationnelles. L’unite logique n’y est plus la table, et les données ne sont en general pas manipulees avec SQL. I MapReduce : modèle de programmation permettant de manipuler de grandes quantités de données non obligatoirement structurées. I Hadoop / Cassandra / MongoDB : framework de développement d’applica- tion utilisant le modèle Map Reduce. I Data Flow / Pig / Hive ... : logiciel et langage d’analyse de données per- mettant d’utiliser Hadoop. Minyar Sassi Hidri Technologies pour le Big Data 16 / 227
  • 18.
    Problématique et termesclés 1 Big Data : Faits, Intérêts, Sources et Challenges 2 Qu’est-ce que le Big Data ? Historique & contexte Définition Est-ce une innovation ? Vocabulaire 3 Problématique et termes clés 4 Forces majeurs 5 Importance et défis du Big Data 6 Big Data et décisionnel 7 Approche traditionnelle versus approche Big Data Approche traditionnelle Approche Big Data Fusion de deux approches 8 Mise en place du Big Data : des chantiers de grande ampleur 9 Enjeux stratégiques Big Data : pour qui, pour quoi ? Impacts du Big Data dans l’entreprise 10 Enjeux technologiques Minyar Sassi Hidri Technologies pour le Big Data 17 / 227
  • 19.
    Problématique et termesclés Problématique et termes clés (1) I Le Big Data se caractérise par la problématique des 3V (5V) : - Volume (Volume) - L’entreprise est submergée de volumes de données croissants de tous types. Variété (Variety) - Gérer la complexité de plusieurs types de données et de schémas struc- turés ou non structurés (texte, données de capteurs, son, vidéo, logs, etc.). Vitesse (Velocity) - Parfois, les données doivent être saisies et traitées au fil de l’eau, au fur et à mesure de leur collection par l’entreprise, pour la détection des fraudes (on qualifie de fraude toute action destinée à tromper. La falsification et l’adultération sont des exemples de fraude) par exemple. Minyar Sassi Hidri Technologies pour le Big Data 18 / 227
  • 20.
    Problématique et termesclés Problématique et termes clés (2) I Vous êtes confrontés à une problématique de gestion de données cor- respondant à ces trois critères. I Vous ne savez plus gérer ces données avec les architectures tradition- nelles. ⇒ Vous avez une problématique de type Big Data. I Il faut en effet penser à collecter, stocker puis analyser les données d’une fac¸on qui ne peut plus être traitée par une approche traditionnelle pour permettre de satisfaire au 4ème V. ⇒ la Valorisation des données. I Objectif : Relever ce qui est important et ce qui l’est moins. Minyar Sassi Hidri Technologies pour le Big Data 19 / 227
  • 21.
    Problématique et termesclés Big Data : Volume (1) I Le prix de stockage des données a beaucoup diminué ces 30 dernières années : - De $100.000 / Go (1980) - `A $0.10 / Go (2013) - Ordre de grandeur : - Kilobytes : KB bytes - Megabytes : MB - Gigabytes : GB - Terabytes : TB (1012 ) bytes - Petabytes : PB (1015 ) bytes - Exabytes : EB (1018 ) bytes - Zettabytes : ZB (1021 ) bytes - Yottabytes : YB (1024 ) bytes. - 1 Yottabyte nécessite 250 trillion DVD. - Grand marché de données est estimé à croître de 45% par annnée pour atteindre 25 milliards de dol- lars cette année (2015). - ∼ 1.8 ZB créées en 2011 ; ∼ 8 ZB en 2015 ; ∼ 35 ZB en 2020 Minyar Sassi Hidri Technologies pour le Big Data 20 / 227
  • 22.
    Problématique et termesclés Big Data : Volume (2) I Les lieux de stockage fiables (comme des SAN : Storage Area Network) ou réseaux de stockage peuvent être très coûteux : Choisir de ne stocker que certaines données, jugées sensibles. Perte de données, pouvant être très utiles, comme les Logs. I Comment déterminer les données qui méritent d’être stockées ? Transactions ? Logs ? Métier ? Utilisateur ? Capteurs ? Médicales ? Sociales ?. ⇒ Aucune donnée n’est inutile. Certaines n’ont juste pas encore servi. I Problèmes : - Comment stocker les données dans un endroit fiable, qui soit moins cher ? - Comment parcourir ces données et en extraire des informations facilement et rapidement ? Minyar Sassi Hidri Technologies pour le Big Data 21 / 227
  • 23.
    Problématique et termesclés Big Data : Variété (1) I Pour un stockage dans des bases de données ou dans des entrepôts de données, les données doivent respecter un format prédéfini. I La plupart des données existantes sont non-structurées ou semi-structurées I Données sous plusieurs formats et types. I On veut tout stocker : Exemple : pour une discussion dans un centre d’appel, on peut la stocker sous forme textuelle pour son contenu, comme on peut stocker l’enregistrement en entier, pour interpréter le ton de voix du client. I Certaines données peuvent paraître obsolètes, mais sont utiles pour certaines décisions : Exemple : Pour le transport de marchandise, on a tendance à choisir le camion le plus proche. Mais parfois, ce n’est pas la meilleure solution. D’autres problèmes peuvent intervenir. Besoin de : Données GPS, plan de livraison du camion, circulation, chargement du camion, Niveau d’essence... Minyar Sassi Hidri Technologies pour le Big Data 22 / 227
  • 24.
    Problématique et termesclés Big Data : Variété (2) Données structurées versus Données non structurées I Données structurées : Données que l’on peut clairement codifier et identifier. I Les données d’un tableur sont typiquement des données structurées. I On peut comprendre leurs significations en croisant les titres de la ligne et colonne dans laquelle se trouent les données. ⇒ Les systèmes d’analyse algorithmique ont depuis toujours été développés pour traiter ce type de données. I Données non structurées : Données qui ne répondent pas à un codage qui per- met d’en tirer de l’infor- mation. I C’est en analysant les contenus des messages que l’on déduit l’informa- tion : fichiers texte, au- dio, vidéo, etc. que l’on peut clairement codifier et identifier. Minyar Sassi Hidri Technologies pour le Big Data 23 / 227
  • 25.
    Problématique et termesclés Big Data : Vélocité I Rapidité d’arrivée des données. I Vitesse de traitement. I Les données doivent être stockées a l’arrivée, parfois même des Tera- octets par jour Sinon, risque de perte d’informations. I Exemple : Il ne suffit pas de savoir quel article un client a acheté ou réservé. Si on sait que vous avez passé plus de 5mn à consulter un article dans une boutique d’achat en ligne, il est possible de vous envoyer un email dès que cet article est soldé. Minyar Sassi Hidri Technologies pour le Big Data 24 / 227
  • 26.
    Problématique et termesclés Big Data : Le 4ème V - La Véracité I On peut classifier les données traitées sous le chapeau du Big Data en deux principaux types : + Données des entreprises : elles comportent les emails, les documents, les bases de données, toutes les historiques des processus métiers (Logs) + Données en dehors des entreprises : elles englobent les bases de données externes (publiques ou fournisseurs de données) contenues et échangées via les réseaux sociaux , en ligne, les historiques de navigation et de recherche, les données transmises par les objets connectés, etc. ⇒ Véracité : ou qualité de données s’introduit. Données doivent être nettoyées, essuyées et mises en cohérence avant de pou- voir être analysées et croisées avec les données internes. La qualité des données dépend de deux facteurs : - Données peuvent être inexactes, incomplètes ou structurées d’une ma- nière qui les rendent difficile à analyser. ⇒ Il devient indispensable de vérifier la crédibilité de la source et la qualité du contenu préalablement. - Il n’est pas toujours facile d’anticiper quelles sont les données qui seront utiles à l’entreprise. ⇒ Bien étudier et définir le besoin réel pour ne pas dépenser ses res- sources à l’analyse de données qui peuvent être inutiles. Minyar Sassi Hidri Technologies pour le Big Data 25 / 227
  • 27.
    Problématique et termesclés Big Data : Le 4ème V - La Véracité Source : IBM Minyar Sassi Hidri Technologies pour le Big Data 26 / 227
  • 28.
    Problématique et termesclés Big Data : Le 5ème V - La Visualisation (Valeur) (1) I Le Big Data, ce n’est pas simplement des volumes de données considérables échangés, mais aussi une variété de contenus, de formats et de sources infinies, ainsi qu’une véritable problématique de maîtrise de la vitesse de création et de mise à jour des données. I Enfin, et pas des moindres, la Big Data met en opposition deux nécessités a priori contra- dictoires : - Celle de rationaliser et rendre accessibles des données qui se comptent pourtant en millions, milliards...C’est là qu’intervient le besoin d’une visualisation de données optimale et adaptée à une exploitation très opérationnelle de cette Big Data, avec trois objectifs finaux : Créer de la valeur, découvrir des insights différenciants, innover...le tout à un coût modéré ! Minyar Sassi Hidri Technologies pour le Big Data 27 / 227
  • 29.
    Forces majeurs 1 BigData : Faits, Intérêts, Sources et Challenges 2 Qu’est-ce que le Big Data ? Historique & contexte Définition Est-ce une innovation ? Vocabulaire 3 Problématique et termes clés 4 Forces majeurs 5 Importance et défis du Big Data 6 Big Data et décisionnel 7 Approche traditionnelle versus approche Big Data Approche traditionnelle Approche Big Data Fusion de deux approches 8 Mise en place du Big Data : des chantiers de grande ampleur 9 Enjeux stratégiques Big Data : pour qui, pour quoi ? Impacts du Big Data dans l’entreprise 10 Enjeux technologiques Minyar Sassi Hidri Technologies pour le Big Data 28 / 227
  • 30.
    Forces majeurs Forces majeurs D’unemanière générale, on identifie cinq forces majeures à l’origine de l’accélération et l’augmentation du mouvement Big Data à savoir : La révolution du stockage grâce au Cloud. L’avènement d’une nouvelle science des données : les Analytics avancés. Les nouvelles possibilités de monétisation. L’automatisation des échanges de données et les objets connectés. Les progrès de la visualisation de données. Minyar Sassi Hidri Technologies pour le Big Data 29 / 227
  • 31.
    Forces majeurs Révolutionde stockage Forces majeurs Révolution de stockage I Massification des échanges de données + Augmentation des types de contenus ⇒ Dépassement des possibilités de stockage des entrepôts de données des entreprises (SQL et MySQL pour les BDR). I Année 2000 : ruptures importantes se sont produites sur le volet stockage de l’information grâce à l’Internet : Proposer aux entreprises et aux particuliers des espaces de stockage flexibles dans les nuages ou Cloud à des prix très compétitifs (Google, Amazon, etc.) ; Espaces accessibles à travers des interfaces en ligne (Google App Engine, etc.). Développement d’une nouvelle philosophie de stockage intelligent de données, sous le vocable NoSQL, permettant des requêtes plus rapides et plus flexibles. ⇒ Grâce aux progrès technologique du Cloud et du NoSQL, le stockage et l’exploration du Big Data devient une opportunité plutôt qu’un obstacle pour les entreprises. Minyar Sassi Hidri Technologies pour le Big Data 30 / 227
  • 32.
    Forces majeurs Avènementd’une nouvelle science des données Forces majeurs Avènement d’une nouvelle science des données I La révolution du Big Data va de pair avec l’emergence d’une nouvelle science des données. I D’après Eric Moulines : La valorisation des immenses volumes de données hétérogènes passe la mise en œuvre d’analyses sophistiquées, un véritable passage à l’échelle dans la conception des modèles d’analyse et la mise en œuvre des algorithmes. I Analytics avancés : Statistiques non-paramétriques : Le modèle n’est pas décrit par un nombre fini de paramètres (http ://cmatias.perso.math.cnrs.fr/Docs/cours stat np ensiie.pdf). Règles d’association. Réduction de dimension : ACP, ACM, AFC, etc.. Classification non supervisée (ou clustering) : k-moyennes, CMF, etc.. Algorithmes génétiques. Minyar Sassi Hidri Technologies pour le Big Data 31 / 227
  • 33.
    Forces majeurs Automatisationdes échanges de données et les objets connectés Forces majeurs Automatisation des échanges de données et les objets connectés I D’après Jean Franc¸ois Marcotorchino, Vice-Président et Directeur scientifique de Thales France : Le transfert extrêmement massif d’informations multimodales (vidéos, images, sons, localisation en plus du texte et des données structurées) via les smart- phones, les appareils connectés, les réseaux sociaux, mais aussi les opérateurs de e-commerce sont des facteurs fondamentaux à l’origines des problématiques Big Data.. I Exemple : - Chaque fois qu’on visite un site, qu’on clique sur un lien, depuis un ordinateur ou un smartphone, le comportement de l’utilisateur sur le site est automatiquement enregistré et analysé pour déterminer son profil, ses intentions d’achat et ses goûts. - Chaque étape du parcours de l’utilisateur peut être analysée pour comprendre les facteurs qui ont influencé sa décision d’achat et les critères qui lui sont indifférents. - De la même fac¸on, son décodeur TV analyse et transmet en temps réel des informa- tions sur ses comportements devant la télévision, connaˆıtre ce qu’il regarde, s’il zappe dès le début des publicités, s’il regarde plus souvent la télévision seul ou à plusieurs, etc. Minyar Sassi Hidri Technologies pour le Big Data 32 / 227
  • 34.
    Forces majeurs Progrèsde la visualisation de données Forces majeurs Progrès de la visualisation de données I Les utilisateurs / décideurs doivent pouvoir visualiser et comprendre les résultats. I Le Reporting version Big Data doit être conc¸u pour pouvoir trouver une aiguille dans une botte de foin. ⇒ On parle de data vizualisation. I Exemple : Tableur, Qlikview, Gephi, etc. Minyar Sassi Hidri Technologies pour le Big Data 33 / 227
  • 35.
    Importance et défisdu Big Data 1 Big Data : Faits, Intérêts, Sources et Challenges 2 Qu’est-ce que le Big Data ? Historique & contexte Définition Est-ce une innovation ? Vocabulaire 3 Problématique et termes clés 4 Forces majeurs 5 Importance et défis du Big Data 6 Big Data et décisionnel 7 Approche traditionnelle versus approche Big Data Approche traditionnelle Approche Big Data Fusion de deux approches 8 Mise en place du Big Data : des chantiers de grande ampleur 9 Enjeux stratégiques Big Data : pour qui, pour quoi ? Impacts du Big Data dans l’entreprise 10 Enjeux technologiques Minyar Sassi Hidri Technologies pour le Big Data 34 / 227
  • 36.
    Importance et défisdu Big Data Importance du Big Data Importance du Big Data I Dans la technologie de l’information : améliorer la sécurité, diagnostiquer les anomalies et le dépannage en analysant les structures dans les logs existants. I Au service chargé de la clientèle : en utilisant des informations des centres d’appels afin d’obtenir les modèles de clientèle et donc d’améliorer la satisfaction du client par la per- sonnalisation des services. I Dans l’amélioration des services et des produits : à travers l’utilisation du contenu des médias sociaux. En connaissant les préférences des clients potentiels, l’entreprise peut modifier son produit afin de répondre à une plus large gamme de personnes. I Dans la détection de la fraude : dans les transactions en ligne pour toute type d’industrie. I Dans l’évaluation des risques en analysant les informations provenant des transactions sur le marché financier. Minyar Sassi Hidri Technologies pour le Big Data 35 / 227
  • 37.
    Importance et défisdu Big Data Défis du Big Data Défis du Big Data I Afin de déterminer la meilleure stratégie pour une entreprise, il est essentiel que les données qu’on compte sur soient correctement analysées. I Le laps de temps de cette analyse est important parce que certaines d’entre elles doivent être effectuées fréquemment afin de déterminer rapidement tout changement dans l’envi- ronnement des affaires. I Nouvelles technologies ⇒ problème organisationnel. I La nécessité des spécialistes de l’informatique : pour qu’une entreprise prend l’initiative du Big Data, elle doit soit engager des experts ou former les employés existants dans ce nouveau domaine. I La confidentialité et la sécurité : Comme le Big Data englobe une grande quantité de données complexes, il est très difficile pour une entreprise de trier ces données selon des niveaux privés et d’appliquer la sécurité adéquate. En outre, la plupart des entreprises aujourd’hui font des affaires à travers des pays et continents et les différences entre les lois privées sont considérables et doivent être pris en considération lors du démarrage de l’initiative Big Data. Minyar Sassi Hidri Technologies pour le Big Data 36 / 227
  • 38.
    Big Data etdécisionnel Plan 1 Big Data : Faits, Intérêts, Sources et Challenges 2 Qu’est-ce que le Big Data ? Historique & contexte Définition Est-ce une innovation ? Vocabulaire 3 Problématique et termes clés 4 Forces majeurs 5 Importance et défis du Big Data 6 Big Data et décisionnel 7 Approche traditionnelle versus approche Big Data Approche traditionnelle Approche Big Data Fusion de deux approches 8 Mise en place du Big Data : des chantiers de grande ampleur 9 Enjeux stratégiques Big Data : pour qui, pour quoi ? Impacts du Big Data dans l’entreprise 10 Enjeux technologiques Minyar Sassi Hidri Technologies pour le Big Data 37 / 227
  • 39.
    Big Data etdécisionnel Big Data et décisionnel I Le modèle OLAP, ou traitement analytique en ligne, est considéré l’ancêtre du Big Data. I Il s’agit de volumes importants de données historiques qui représentent toutes les données de l’entreprise, et qui sont requˆetées afin d’obtenir des informations agrégées et statistiques de l’activité de l’entreprise (décisionnel, ou Business Intelligence), ou pour extraire des informations nouvelles de ces données existantes à l’aide d’algorithmes de traitement des données (Data Mining). I Mais... - Modélisation des données prélimi- naires : Fait et Dimensions. - Structuration de données / à des be- soins spécifiques. - Application à une analyse multi- dimensionnelle des données, mais pas pour fouille de données ou ap- prentissage automatique. Minyar Sassi Hidri Technologies pour le Big Data 38 / 227
  • 40.
    Approche traditionnelle versusapproche Big Data 1 Big Data : Faits, Intérêts, Sources et Challenges 2 Qu’est-ce que le Big Data ? Historique & contexte Définition Est-ce une innovation ? Vocabulaire 3 Problématique et termes clés 4 Forces majeurs 5 Importance et défis du Big Data 6 Big Data et décisionnel 7 Approche traditionnelle versus approche Big Data Approche traditionnelle Approche Big Data Fusion de deux approches 8 Mise en place du Big Data : des chantiers de grande ampleur 9 Enjeux stratégiques Big Data : pour qui, pour quoi ? Impacts du Big Data dans l’entreprise 10 Enjeux technologiques Minyar Sassi Hidri Technologies pour le Big Data 39 / 227
  • 41.
    Approche traditionnelle versusapproche Big Data Approche traditionnelle Approche Traditionnelle Analyse structurée et répétée I Les besoins métiers guident la conception de la solution. I Appropriée pour les données structurées. I Les opérations et les processus répétitifs, les sources relativement stables et les besoins sont bien compris et cadrés. Minyar Sassi Hidri Technologies pour le Big Data 40 / 227
  • 42.
    Approche traditionnelle versusapproche Big Data Approche Big Data Approche Big Data (1) Analyse itérative et exploratoire I Les sources d’information guident la découverte créative. Minyar Sassi Hidri Technologies pour le Big Data 41 / 227
  • 43.
    Approche traditionnelle versusapproche Big Data Fusion de deux approches Fusionner l’approche Big Data avec l’approche Traditionnelle I La question n’est pas : - Dois-je choisir entre l’approche classique et l’approche Big Data ? I Mais plutôt : - Comment les faire fonctionner ensemble ? Approche Traditionnelle Approche Big Data Analyse structurée et répétée Analyse itérative et exploratoire Minyar Sassi Hidri Technologies pour le Big Data 42 / 227
  • 44.
    Mise en placedu Big Data : des chantiers de grande ampleur 1 Big Data : Faits, Intérêts, Sources et Challenges 2 Qu’est-ce que le Big Data ? Historique & contexte Définition Est-ce une innovation ? Vocabulaire 3 Problématique et termes clés 4 Forces majeurs 5 Importance et défis du Big Data 6 Big Data et décisionnel 7 Approche traditionnelle versus approche Big Data Approche traditionnelle Approche Big Data Fusion de deux approches 8 Mise en place du Big Data : des chantiers de grande ampleur 9 Enjeux stratégiques Big Data : pour qui, pour quoi ? Impacts du Big Data dans l’entreprise 10 Enjeux technologiques Minyar Sassi Hidri Technologies pour le Big Data 43 / 227
  • 45.
    Mise en placedu Big Data : des chantiers de grande ampleur Mise en place d’un projet Big Data I Choisir d’investir dans le Big Data est un premier pas, encore faut-il que les besoins métier soient identifiés en amont. I Deux étapes : Instruction & Conception - Instruction : Essentielle à chaque projet et prend tout son poids dans ce type de chantiers. Minyar Sassi Hidri Technologies pour le Big Data 44 / 227
  • 46.
    Mise en placedu Big Data : des chantiers de grande ampleur Méthodologie Une approche progressive et itérative I Dans ce type de projets, le modèle clas- sique du cycle en V est déconseillé. I Il faut au contraire construire la solution progressivement, en prévoyant quelques itérations comprenant des interactions avec les futurs utilisateurs. I Données sont au cœur des attentes ⇒ Un dialogue permanent avec les utilisateurs des données doit être établi. I Les méthodes incrémentales sont donc adaptées à ce type de projet : - Il s’agit de diviser le projet en incréments, c’est-à-dire en parties fonctionnelles cohé- rentes. - Chaque incrément pouvant être testé séparément et faisant l’objet de plusieurs itéra- tions. - L’objectif est d’impliquer les utilisateurs dans le développement, la fourniture des exigences et l’évaluation des itérations. Minyar Sassi Hidri Technologies pour le Big Data 45 / 227
  • 47.
    Enjeux stratégiques 1 BigData : Faits, Intérêts, Sources et Challenges 2 Qu’est-ce que le Big Data ? Historique & contexte Définition Est-ce une innovation ? Vocabulaire 3 Problématique et termes clés 4 Forces majeurs 5 Importance et défis du Big Data 6 Big Data et décisionnel 7 Approche traditionnelle versus approche Big Data Approche traditionnelle Approche Big Data Fusion de deux approches 8 Mise en place du Big Data : des chantiers de grande ampleur 9 Enjeux stratégiques Big Data : pour qui, pour quoi ? Impacts du Big Data dans l’entreprise 10 Enjeux technologiques Minyar Sassi Hidri Technologies pour le Big Data 46 / 227
  • 48.
    Enjeux stratégiques BigData : pour qui, pour quoi ? Big Data : pour qui, pour quoi ? Des arômes et ingrédients qui se déclinent dans tous les secteurs d’activité Minyar Sassi Hidri Technologies pour le Big Data 47 / 227
  • 49.
    Enjeux stratégiques Impactsdu Big Data dans l’entreprise Impacts du Big Data dans l’entreprise (1) I La Big Data impacte l’ensemble de l’entreprise et permet de remettre le client au cœur de la stratégie : Tous les départements sont concernés par l’exploitation du Big Data : Marketing, Communication, Digital, RH, ´Etudes, Commercial, Finances, Innovation, Direction Générale... Finie la démarche Top Down où la Marque pousse sa stratégie vers le consommateur, en espérant que celle ci cadre avec les attentes de ses cibles. La Big Data permet, via l’analyse data, de se défaire de cette angoisse puisqu’elle remet le consommateur au cœur de la stratégie de l’entreprise. Ainsi, le comportement du consommateur, ses centres d’intérêt et ses prises de parole libres générés à grande échelle sont agrégés et analysés afin de créer ce fameux cadre stratégique, qui devient par définition totalement ajusté aux besoins et attentes des clients, et permet à la Marque d’alimenter toutes les directions de l’entreprise de fac¸on innovante et performante. Minyar Sassi Hidri Technologies pour le Big Data 48 / 227
  • 50.
    Enjeux stratégiques Impactsdu Big Data dans l’entreprise Impacts du Big Data dans l’entreprise (2) Minyar Sassi Hidri Technologies pour le Big Data 49 / 227
  • 51.
    Enjeux stratégiques Impactsdu Big Data dans l’entreprise Impacts du Big Data dans l’entreprise (3) I L’emergence de nouveaux metiers capables de gérer vos données d’In- ternet et d’en extraire les bonnes informations : Architecte Big Data : - Connaissance infrastructures et logiciels Big Data. Connaissances en modélisations. Data Analyst - Connaissance des logiciels & langages Big Data. Connaissance en modélisations. Data Scientist : - Connaissance des logiciels & langages Big Data. Connaissance en modélisations. Connaissances metiers. Chief-Data-Officer (Directeur des données) : - Responsable des données et de leur gouvernance (collecte, traitement, sauvegarde, accès). Responsable de l’analyse des données et aide à la decision. ⇒ Mettre en œuvre des équipes agiles & transverses. Minyar Sassi Hidri Technologies pour le Big Data 50 / 227
  • 52.
    Enjeux technologiques 1 BigData : Faits, Intérêts, Sources et Challenges 2 Qu’est-ce que le Big Data ? Historique & contexte Définition Est-ce une innovation ? Vocabulaire 3 Problématique et termes clés 4 Forces majeurs 5 Importance et défis du Big Data 6 Big Data et décisionnel 7 Approche traditionnelle versus approche Big Data Approche traditionnelle Approche Big Data Fusion de deux approches 8 Mise en place du Big Data : des chantiers de grande ampleur 9 Enjeux stratégiques Big Data : pour qui, pour quoi ? Impacts du Big Data dans l’entreprise 10 Enjeux technologiques Minyar Sassi Hidri Technologies pour le Big Data 51 / 227
  • 53.
    Enjeux technologiques Enjeux technologiques Typesd’outils utilisés dans le Big Data I Où le traitement est hébergé ? Serveurs distribués / Cloud (exemple Amazon EC2) I Où les données sont stockées ? Stockage distribué (exemple Amazon S3) I Quel modèle de programmation ? Traitement réparti (exemple MapReduce) I Comment les données sont stockées et indexées ? Bases de données à haute performance sans schéma (exemples MongoDB, Cassandra) I Quelles opérations sont effectuées sur des données ? Analytique Minyar Sassi Hidri Technologies pour le Big Data 52 / 227
  • 54.
    Chapitre 2 -Hadoop, MapReduce et le Big Data 1 Hadoop : Un standard de gestion des données et applications distribuées 2 HDFS : Hadoop Distributed File System 3 MapReduce Minyar Sassi Hidri Technologies pour le Big Data 53 / 227
  • 55.
    Objectifs I Découvrir diversessolutions complémentaires liées à Hadoop. I Apprendre à installer et à utiliser Hadoop. I Découvrir le paradigme de programmation parallèle MapReduce. Minyar Sassi Hidri Technologies pour le Big Data 54 / 227
  • 56.
    Hadoop 1 Hadoop :Un standard de gestion des données et applications distribuées Problématiques du calcul distribué La solution : Apache Hadoop L’écosystème Hodoop 2 HDFS : Hadoop Distributed File System Présentation Architecture ´Ecriture / Lecture d’un fichier 3 MapReduce Présentation Modèle de programmation Exemples Minyar Sassi Hidri Technologies pour le Big Data 55 / 227
  • 57.
    Hadoop Problématiques ducalcul distribué Problématiques du calcul distribué (1) I Calcul distribué : exécution d’un traitement informatique sur une mul- titude de machines différentes (un cluster de machines) de manière transparente. I Problématiques : 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 archi- tectures. 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. Minyar Sassi Hidri Technologies pour le Big Data 56 / 227
  • 58.
    Hadoop Problématiques ducalcul distribué Problématiques du calcul distribué (2) I Ces problématiques sont complexes et ont donné lieu à des années de recherche et d’expérimentation. I On distingue historiquement deux approches/cas d’usage : [1] Effectuer des calculs intensifs localement (recherche scientifique) - on souhaite avoir un cluster de machines local pour accélérer le traitement. ⇒ Solution qui était jusqu’ici coûteuse et complexe à mettre en œuvre. [2] Exploiter la démocratisation de l’informatique moderne et la bonne volonté des utilisateurs du réseau pour créer un cluster distribué via Internet à moindre coût. ⇒ Solution qui suppose qu’on trouve des volontaires susceptibles de partager leur puissance de calcul. Minyar Sassi Hidri Technologies pour le Big Data 57 / 227
  • 59.
    Hadoop Problématiques ducalcul distribué Problématiques du calcul distribué (3) I De nombreuses universités et entreprises ont des besoins d’exécution locale de tâches parallélisables sur des données massives. I Les solutions qui étaient disponibles jusqu’ici : [1] Des super calculateurs classiques comme Blue Gene : très oné- reux, souvent trop puissants par rapport aux besoins requis, réservés aux grands groupes industriels. [2] Des solutions développées en interne : investissement initial très conséquent, nécessite des compétences et une rigueur coûteuses. [3] Architecture Beowulf : un début de réponse, mais complexe à mettre en œuvre pour beaucoup d’entreprises ou petites universités, et nécessi- tant aussi un investissement initial assez conséquent. Minyar Sassi Hidri Technologies pour le Big Data 58 / 227
  • 60.
    Hadoop Problématiques ducalcul distribué Problématiques du calcul distribué (4) I Le problème qui se posait jusqu’ici pour ce cas d’usage : Avoir un framework déjà disponible, facile à déployer, et qui permette l’exécution de tâches parallélisables - et le support et le suivi de ces tâches - de manière rapide et simple à mettre en œuvre. L’idée étant d’avoir un outil off the shelf qui puisse être installé et configuré rapidement au sein d’une entreprise/d’une université et qui permet à des développeurs d’exécuter des tâches distribuées avec un minimum de formation requise. L’outil en question devant être facile à déployer, simple à supporter, et pouvant permettre la création de clusters de tailles variables extensibles à tout moment. Minyar Sassi Hidri Technologies pour le Big Data 59 / 227
  • 61.
    Hadoop La solution: Apache Hadoop La solution Apache Hadoop Avantages Projet de la fondation Apache - Open Source, composants complètement ouverts, tout le monde peut participer. Modèle simple pour les développeurs : il suffit de développer des tâches Ma- pReduce depuis des interfaces simples accessibles via des librairies dans des langages multiples (Java, Python, C/C++, Rubby, R, etc.). Déployable très facilement (paquets Linux pré-configurés), configuration très simple elle aussi. S’occupe de toutes les problématiques liées au calcul distribué, comme l’accès et le partage des données, la tolérance aux pannes, ou encore la répartition des tâches aux machines membres du cluster. ⇒ Le programmeur a simplement à s’occuper du développement logiciel pour l’exécution de la tâche. Minyar Sassi Hidri Technologies pour le Big Data 60 / 227
  • 62.
    Hadoop La solution: Apache Hadoop Historique 2002 : Doug Cutting (directeur archive.org) et Mike Cafarella (étudiant) développent Nutch, un moteur de recherche Open Source exploitant le calcul distribué. L’implémentation peut tourner seulement sur quelques machines et a de multiples pro- blèmes, notamment en ce qui concerne l’accès et le partage de fichiers. 2003/2004 : Le département de recherche de Google publie deux whitepapers, le premier sur GFS (un système de fichier distribué) et le second sur le paradigme MapReduce pour le calcul distribué. 2004 : Doug Cutting et Mike Cafarella développent un framework (encore assez primitif) inspiré des papers de Google et portent leur projet Nutch sur ce framework. 2006 : Doug Cutting, chez Yahoo, est en charge d’améliorer l’indexation du moteur de recherche de Yahoo. Il exploite le framework réalisé précédemment et créé une nouvelle version améliorée du framework en tant que projet Open Source de la fondation Apache, qu’il nomme Hadoop (le nom d’un éléphant en peluche de son fils). - `A l’époque, Hadoop est encore largement en développement - un cluster pouvait alors comporter au maximum 5 à 20 machines, etc. . 2008 : Le développement est maintenant très abouti, et Hadoop est exploité par le moteur de recherche de Yahoo ainsi que par de nombreuses autres divisions de l’entreprise. 2011 : Hadoop est désormais utilisé par de nombreuses autres entreprises et des universités, et le cluster Yahoo comporte 42000 machines et des centaines de Petaoctets d’espace de stockage. 2015 : Hadoop se généralise notamment avec le buzz BigData et Cloud... Minyar Sassi Hidri Technologies pour le Big Data 61 / 227
  • 63.
    Hadoop La solution: Apache Hadoop Qui utilise Hadoop ? ...et des centaines d’entreprises et universités à travers le monde. Minyar Sassi Hidri Technologies pour le Big Data 62 / 227
  • 64.
    Hadoop La solution: Apache Hadoop Apache Hadoop : Une technologie en plein essort I De plus en plus de données produites par des SI deviennent très nombreuses. Ces données doivent toutes être analysées, corrélées, etc. I Hadoop offre une solution idéale et facile à implémenter au problème. Le projet Hadoop consiste en deux grandes parties : - Stockage des données : HDFS (Hadoop Distributed File System). - Traitement des données : MapReduce. Principe : - Diviser les données. - Les sauvegarder sur une collection de machines, appelées cluster. - Traiter les données directement là où elles sont stockées, plutôt que de les copier à partir d’un serveur distribué. Note : Il est possible d’ajouter des machines à votre cluster, au fur et à mesure que les données augmentent. I Le domaine de recherche/industriel autour de la gestion et de l’analyse de ces données - et de Hadoop et les technologies associées - est communément désigné sous l’expression Big Data. I 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. IDC : International Data Corporation - une entreprise américaine spécialisée dans la réalisation d’études de marché dans les domaines des technologies de l’information et de la communication et de l’électronique grand public. Minyar Sassi Hidri Technologies pour le Big Data 63 / 227
  • 65.
    Hadoop L’écosystème Hodoop Hadoop: Système d’exploitation de la donnée Vue d’ensemble I HDFS : Système de fichiers distri- bué. I MapReduce : Framework de trai- tement parallélisé. I HBase Système de gestion de base de données non-relationnelles distribué de type orientée colonnes. I Pig : Requêtage des données Hadoop à partir d’un langage de script. I Hive : Requêtage de type SQL. Et la gestion des transactions ? ? ? ? ? Déjà dans toutes les têtes surtout celle de Doug Cutting (le père de Hadoop) ! ! Minyar Sassi Hidri Technologies pour le Big Data 64 / 227
  • 66.
    Hadoop L’écosystème Hodoop Collecteet integration de données I Sqoop Outils permettant de transférer des données en masse entre Hadoop et un entrepôt de données structuré tel qu’une BD. I Flume Flume est un service distribué, fiable et hautement disponible servant à la collecte, l’agrégation et le déplacement d’une grosse quantité de données de logs. I Kafka (messaging) Système orienté message de type publish/subscribe implémenté comme système de traces transactionnel distribué, adapté pour la consommation de messages en-ligne et hors ligne. Minyar Sassi Hidri Technologies pour le Big Data 65 / 227
  • 67.
    Hadoop L’écosystème Hodoop BatchProcessing I Hive Permet l’exécution de requêtes SQL sur un cluster Hadoop en vue d’analyser et d’agréger les données. Langage de visualisation uniquement. Offre les connecteurs ODBC/JDBC. I Pig Permet le requêtage des données Hadoop à partir d’un langage de script. Basé sur un langage de haut niveau permettant de créer des programmes de type MapReduce. I Cascading API de traitement de données et planificateur de requêtes pour la définition, le partage et le traitement de données. I Spark Moteur d’analyse multi-fonctions adapté au traitement rapide de gros volumes de données. Concurrent de MapReduce. Minyar Sassi Hidri Technologies pour le Big Data 66 / 227
  • 68.
    Hadoop L’écosystème Hodoop AnalyticSQL I Drill Système distribué permettant d’effectuer des requêtes sur de larges données permet- tant l’analyse interactive des données en SQL. Permet de requêter des sources de données hétérogènes : MongoDB, JSON, HDFS, Hive, Classpath, HBase. Offre le connecteur ODBC. I Impala Système distribué permettant d’effectuer des requêtes sur de larges données permet- tant l’analyse interactive des données en SQL. Permet de requêter des sources de données hétérogènes : HDFS, HBase. Compatible avec Hive. I Spark SQL Module de Spark offrant une API de plus haut niveau avec une syntaxe SQL. ´Equivalent à Hive mais s’exécutant sur Spark. Offre le connecteur JDBC. Minyar Sassi Hidri Technologies pour le Big Data 67 / 227
  • 69.
    Hadoop L’écosystème Hodoop Streamprocessing I Storm Système de calcul distribué temps réel. I Spark Streaming Module de Spark permettant de traiter des flux de données qui arrivent en continu, et donc de traiter ces données au fur et à mesure de leur arrivée. I Spring XD Basé sur Spring Integration, Spring Batch et Spring Data. I Samza Framework permettant de traiter de manière distribué des flux. Utilise Kafka, Yarn. Minyar Sassi Hidri Technologies pour le Big Data 68 / 227
  • 70.
    Hadoop L’écosystème Hodoop MachineLearning (apprentissage automatique) I Mahout Vise à créer des implémentations d’algorithmes d’apprentissage automa- tiques et de Data Mining. Même si les principaux algorithmes d’apprentissage se basent sur Ma- pReduce, il n’y a pas d’obligation à utiliser Hadoop. I Spark ML Librairie Spark de machine learning fournissant les algorithmes de clas- sique : - Classification. - Regression. - Clustering. - Filtrage collaborative. - Réduction de la dimension. - ... Minyar Sassi Hidri Technologies pour le Big Data 69 / 227
  • 71.
    Hadoop L’écosystème Hodoop SearchEngine I SolR VSolR offre une indexation distribuée et répliquée basée sur Apache Lu- cene. Permet la recherche full text, le highlighting, le facetting et la recherche géospatiale. Permet l’indexation de documents riches. I Elastic Elastic offre une indexation distribuée et répliquée basée sur Apache Lucene. Permet la recherche full text, le highlighting, le facetting et la recherche géospatiale. Permet l’indexation de documents riches. Minyar Sassi Hidri Technologies pour le Big Data 70 / 227
  • 72.
    Hadoop L’écosystème Hodoop Lesdistributions Pourquoi des distributions ? I Pour regrouper de fac¸on homogène les différentes extensions. I Pour faciliter l’installation, la diffusion et le support. I Pour permettre d’incuber des Business Model pour les éditeurs qui contribuent largement à Hadoop. I 3 acteurs majeurs dans l’écosystème : HortonWorks. Cloudera. MapR. I Comment choisir une solution Hadoop ? Modèle économique (Open Source, Commercial..). Les composants. Maturité de la solution, le support, la documentation, le retour d’experiences. Le rapport avec Hadoop, la rapidité des evolutions. Partenariats (hébergeurs...), compatibilité avec les produits satellites. Minyar Sassi Hidri Technologies pour le Big Data 71 / 227
  • 73.
    HDFS : HadoopDistributed File System 1 Hadoop : Un standard de gestion des données et applications distribuées Problématiques du calcul distribué La solution : Apache Hadoop L’écosystème Hodoop 2 HDFS : Hadoop Distributed File System Présentation Architecture ´Ecriture / Lecture d’un fichier 3 MapReduce Présentation Modèle de programmation Exemples Minyar Sassi Hidri Technologies pour le Big Data 72 / 227
  • 74.
    HDFS : HadoopDistributed File System Présentation HDFS : Présentation I Pour stocker les données en entrée de nos tâches Hadoop, ainsi que les résul- tats de nos traitements, on va utiliser HDFS : Hadoop Distributed FileSystem. I HDFS est inspiré de GFS, un système de fichiers distribué conc¸u par Google. I L’implémentation de HDFS a son origine dans un whitepaper issu du dépar- tement de recherche de Google (The Google File System, 2003) I 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, mais : Systèmes de fichiers : les données sont écrites dans des blocs gérés par le FileSystem. HDFS : les données sont écrites dans des blocs gérés par le HDFS, qu’il est évidem- ment distribué. I Permet : La réplication (les blocs sont répliqués). La scalabilité (les blocs ne sont pas tous sur la même machine). Le stockage des données structurées ou non sur un ensemble de serveurs distribués. Minyar Sassi Hidri Technologies pour le Big Data 73 / 227
  • 75.
    HDFS : HadoopDistributed File System Architecture HDFS : Architecture (1) I Node (Master/Slave) : dans une architecture Hadoop, chaque membre pouvant traiter des données est appelé Node (Nœud). I Un seul d’entre eux peut être Master même s’il peut changer au cours de la vie du cluster, il s’agit du NameNode (NN). Il est responsable de la localisation des données dans le cluster. I Les autres nœuds, stockant les données, sont des slaves appelés DataNode (DN). I Le NN est donc un point unique de défaillance (Single Point Of Failure (SPOF)) dans un cluster Hadoop (Hadoop 2.0 introduit un basculement (fai- lover) automatisé). Minyar Sassi Hidri Technologies pour le Big Data 74 / 227
  • 76.
    HDFS : HadoopDistributed File System Architecture HDFS : Architecture (2) I NN : stocke les informations relatives aux noms de fichiers. C’est ce serveur qui, par exemple, va savoir qu’un fichier dans le répertoire Data Input, créé par le programmeur, comporte 58 blocs de données, et qui sait où ils se trouvent. Il y a un seul NN dans tout le cluster Hadoop. I DN : stocke les blocs de données eux-mêmes. Il y a un DN pour chaque machine au sein du cluster, et ils sont en communication constante avec le NN pour recevoir de nouveaux blocs, indiquer quels blocs sont contenus sur le DN, signaler des erreurs, etc... I BlockSize : Taille unitaire de stockage (généralement 64 Mo ou 128 Mo). C’est à dire qu’un fichier de 1 Go et une taille de block de 128 Mo sera divisé en 8 blocks. I Replication Factor C’est le nombre de copies d’une donnée devant être reparties sur les différents nœuds du cluster (souvent 3, c’est à dire une primaire et deux secondaires). I Processus de lecture HDFS : Interrogation du NN pour localiser les adresses des nœuds hébergeant les blocs sous- jacents les plus proches. I Processus d’écriture Écriture sur le DN. DN communique ses blocs au NN. Replication. Minyar Sassi Hidri Technologies pour le Big Data 75 / 227
  • 77.
    HDFS : HadoopDistributed File System ´Ecriture / Lecture d’un fichier ´Ecriture / Lecture d’un fichier ´Ecriture Lecture Minyar Sassi Hidri Technologies pour le Big Data 76 / 227
  • 78.
    HDFS : HadoopDistributed File System ´Ecriture / Lecture d’un fichier Écriture d’un fichier I Si on souhaite écrire un fichier au sein de HDFS, on va utiliser la commande princi- pale de gestion de Hadoop : $hadoop fs. I Le programme va diviser le fichier en blocs de 64MB (ou 128 Mo, selon la configura- tion). I Il va ensuite annoncer au NN. I Le NN va alors indiquer au programme qu’il doit stocker le bloc 1 sur le DN nu- méro 3, et le bloc 2 sur le DN numéro 1. I Le client Hadoop va alors contacter direc- tement les DNs concernés et leur deman- der de stocker les deux blocs en question. I Par ailleurs, les DNs s’occuperont - en in- formant le NN - de répliquer les données entre eux pour éviter toute perte de don- nées. Minyar Sassi Hidri Technologies pour le Big Data 77 / 227
  • 79.
    HDFS : HadoopDistributed File System ´Ecriture / Lecture d’un fichier Lecture d’un fichier I Si on souhaite lire un fichier au sein de HDFS, on utilise aussi le client Hadoop : $hadoop fs. I Le client va contacter le NN en spécifiant le nom de fichier. I Le NN lui répondra par exemple : Il est composé de deux blocs. Le premier est dis- ponible sur le DN 3 et 2, le second sur le DN 1 et 3. I Là aussi, le programme contactera les DNs directement et leur demandera de lui trans- mettre les blocs concernés. En cas d’er- reur/non réponse d’un des DNs, il passe au suivant dans la liste fournie par le NN. Minyar Sassi Hidri Technologies pour le Big Data 78 / 227
  • 80.
    HDFS : HadoopDistributed File System ´Ecriture / Lecture d’un fichier Dysfonctionnement ! ! ! I La gestion du stockage est assurée par les daemons Hadoop. On a pas à se soucier d’où sont stockées les données. I Hadoop réplique lui-même les données : les fichiers sont disponibles à tout moment sur plusieurs DNs, et si une machine tombe en panne, on a toujours accès aux données grâce à la replication. I Si l’un des nœuds a un problème, les données seront perdues : Hadoop réplique chaque bloc 3 fois. Il choisit 3 nœuds au hasard, et place une copie du bloc dans chacun d’eux. Si le nœud est en panne, le NN le détecte, et s’occupe de répliquer encore les blocs qui y etaient hébergés pour avoir toujours 3 copies stockées. I Si le NN a un problème ? Minyar Sassi Hidri Technologies pour le Big Data 79 / 227
  • 81.
    HDFS : HadoopDistributed File System ´Ecriture / Lecture d’un fichier Dysfonctionnement ! ! ! I Si c’est un problème d’accès (ré- seau), les données sont temporaire- ment inaccessibles. I Si le disque du NN est défaillant, les données seront perdues à ja- mais ! ! ! ! I Pour éviter cela, le NN sera dupli- qué, non seulement sur son propre disque, mais également quelque part sur le système de fichiers du réseau. I Définition d’un autre NN (standby NN) pour reprendre le travail si le NN actif est défaillant. Minyar Sassi Hidri Technologies pour le Big Data 80 / 227
  • 82.
    HDFS : HadoopDistributed File System ´Ecriture / Lecture d’un fichier Commandes Hadoop I Comme indiqué plus haut, la commande permettant de stocker ou extraire des fichiers de HDFS est l’utilitaire console $hadoop avec l’option fs. I Il réplique globalement les commandes systèmes standards Linux, et est très simple à utiliser : $hadoop fs -mkdir /Data Input Pour créer le répertoire /Data Input $hadoop fs -put /home/cloudera/mydata.txt /Data Input/mydata.txt Pour stocker le fichier mydata.txt sur HDFS dans le repertoire /Data Input. $hadoop fs -get /Data Input/mydata.txt mydata.txt Pour obtenir le fichier /Data Input/mydata.txt de HDFS et le stocker dans le fichier local mydata.txt. $hadoop fs -cat Data Input/mydata.txt Pour afficher le contenu du fichier mydata.txt. $hadoop fs -rm /Data Input/mydata.txt Pour supprimer le fichier /Data Input/mydata.txt D’autres commandes usuelles : -ls, -cp, -rmr, du, etc... Minyar Sassi Hidri Technologies pour le Big Data 81 / 227
  • 83.
    MapReduce 1 Hadoop :Un standard de gestion des données et applications distribuées Problématiques du calcul distribué La solution : Apache Hadoop L’écosystème Hodoop 2 HDFS : Hadoop Distributed File System Présentation Architecture ´Ecriture / Lecture d’un fichier 3 MapReduce Présentation Modèle de programmation Exemples Minyar Sassi Hidri Technologies pour le Big Data 82 / 227
  • 84.
    MapReduce Présentation Présentation (1) IPour exécuter un problème large de manière distribuée, il faut pouvoir décou- per le problème en plusieurs sous-problèmes de taille réduite à exécuter sur chaque machine du cluster. ⇒ Stratégie algorithmique dite du divide and conquer / diviser pour régner. I De multiples approches de division d’un problème en plusieurs sous-tâches existent : Open MP, MPI, etc... ; I MapReduce est un paradigme visant à généraliser les approches existantes pour produire une approche unique applicable à tous les problèmes. I MapReduce, écrit en C++ (publication issue du département de recherche de Google publié en 2004 (MapReduce : Simplified Data Processing on Large Clusters)). I Un framework pour l’analyse du Big Data : - Pour données non structurées, sans schéma, etc.. - Pour de très grands clusters. - Des milliers de nœuds. - Partitionnement et parallélisation automatiques. Minyar Sassi Hidri Technologies pour le Big Data 83 / 227
  • 85.
    MapReduce Présentation Présentation (2) MapReducedéfinit deux opérations distinctes à effectuer sur les données d’entrée : [1.] Map : - Transforme les données d’entrée en une série de couples (key, value). - Regroupe les données en les associant à des clés, choisies de telle sorte que les couples (key, value) aient un sens par rapport au problème à résoudre. Note : Cette opération doit être parallèlisable. On doit pouvoir découper les données d’entrée en plusieurs fragments, et faire exécuter l’opération Map à chaque machine du cluster sur un fragment distinct. [2.] Reduce : - Applique un traitement à toutes les valeurs de chacune des clés distinctes produite par l’opération Map. - Au terme de l’opération Reduce, on aura un résultat pour chacune des clés distinctes. Ici, on attribuera à chacune des machines du cluster une des clés uniques produites par Map, en lui donnant la liste des valeurs associées à la clé. Chacune des machines effectuera alors l’opération Reduce pour cette clé. Minyar Sassi Hidri Technologies pour le Big Data 84 / 227
  • 86.
    MapReduce Modèle deprogrammation Modèle de programmation I Données sous forme de paires (key, value). Ex. (doc-id, content), (word, count), etc.. I Le programmeur fournit le code de deux fonctions : Map (key, value) → list(ikey, ivalue) : permet de faire le même traitement en parallèle sur des données partitionnées. Reduce(ikey, list(ivalue)) → list(ikey, fvalue) : permet d’agréger les données traitées par Map. I Traitement parallèle des étapes Map et Reduce : Partitionnement des données. Tolérance aux fautes. Ordonnancement des accès disques : méthodes qu’un SE utilise pour décider de l’ordre dans lequel les opérations d’E/S seront transmises aux disques. Minyar Sassi Hidri Technologies pour le Big Data 85 / 227
  • 87.
    MapReduce Modèle deprogrammation Fonctionnement MapReduce On distingue donc 4 étapes dans un traitement MapReduce : 1. Découper (split) les données d’en- trée en plusieurs fragments. 2. Mapper chacun de ces fragments pour obtenir des couples (key, va- lue). 3. Grouper (shuffle) ces couples (key, value) par clé (key). 4. Réduire (reduce) les groupes in- dexés par clé en une forme finale, avec une valeur pour chacune des clés distinctes. Minyar Sassi Hidri Technologies pour le Big Data 86 / 227
  • 88.
    MapReduce Exemples Exemple 1: Comptage du nombre de mots La phase Map (1) I Il s’agit de concevoir un programme MapReduce comptant le nombre d’occurrences des différents mots composant un fichier. am stram gram pic et pic et colégram bour et bour et ratatam am stram gram I Un enregistrement correspond à une ligne terminée par n. I Voici le mapper (pseudo-code) du programme WordCount : Map (key, value) : //key : nom de fichier ; value : contenu (d’une partie) du fichier POUR CHAQUE word w IN value ´Emettre(w, 1) Minyar Sassi Hidri Technologies pour le Big Data 87 / 227
  • 89.
    MapReduce Exemples Exemple 1: Comptage du nombre de mots La phase Map (2) I Le contenu du fichier en sortie de Mapper est comme suit : am,1 stram,1 gram,1 pic,1 et,1 pic,1 et,1 colégram,1 bour,1 et,1 bour,1 et,1 ratatam,1 am,1 stram,1 gram,1 I On notera qu’en sortie de mapper : Les résultats, dits intermédiaires, sont aussi stockés sous forme de (key, value). La valeur en entrée (un mot) est devenue une clé en sortie ; La clé en entrée de mapper ne joue aucun rôle dans le programme. Minyar Sassi Hidri Technologies pour le Big Data 88 / 227
  • 90.
    MapReduce Exemples Exemple 1: Comptage du nombre de mots Entre la phase Map et la phase Reduce I Avant d’être envoyé au reducer, le fi- chier est automatiquement trié par clé : c’est ce que l’on appelle la phase de shuffle & sort. I Le fichier en entrée du reducer est le suivant : am,[1,1] bour,[1,1] colégram,[1] et,[1,1,1,1] gram,[1,1] pic,[1,1] ratatam,[1] stram,[1,1] Minyar Sassi Hidri Technologies pour le Big Data 89 / 227
  • 91.
    MapReduce Exemples Exemple 1: Comptage du nombre de mots La phase Reduce I Voici le reducer du programme MapReduce permettant de consolider les résultats issus du mapper : 1. Reduce (key, values) //key : un mot ; values : une liste de 1 2. r´esultat = 0 3. POUR CHAQUE value v IN values r´esultat+ = v ; 4. ´Emettre(key, r´esultat) Ligne 1 : le reducer prend en entrée un enregistrement sous la forme d’un couple (key, values) avec : - key du type Text (c’est un mot). - values étant une liste de valeurs du type intWri- table. Ligne 2 : le reducer remet à zéro le compteur r´esultat lorsque l’on change de mot (rappelons que le change- ment de mot correspond à un changement de clé, et donc d’enregistrement, et qu’il est géré par Hadoop). Ligne 3 : pour chaque valeur v dans la liste values on ajoute v r´esultat (dans notre exemple v vaut toujours 1). Ligne 4 : quand on change de mot, on écrit dans un fichier en sortie le couple (key, r´esultat), r´esultat étant le nombre d’occurrences du mot contenu dans la variable key. I Le fichier en sortie de reducer sera donc le suivant : am,2 bour,2 colégram,1 et,4 gram,2 pic,2 ratatam,1 stram,2 Minyar Sassi Hidri Technologies pour le Big Data 90 / 227
  • 92.
    MapReduce Exemples Exemple 1: Comptage du nombre de mots Quatre Mappers et deux Reduces I Nous venons d’écrire notre premier programme MapReduce permettant de compter le nombre d’occurrences des différents mots composant un livre. I Il faut néanmoins reconnaître qu’avec un seul Mapper et un seul Reducer les performances de notre programme ne seront pas meilleures que celle d’un programme classique s’exécutant sur une seule machine. I Pour tirer parti des spécificités de Hadoop, nous allons faire évoluer notre cluster en le configurant pour qu’il dispose de : Quatre Mappers. Deux Reducers. Minyar Sassi Hidri Technologies pour le Big Data 91 / 227
  • 93.
    MapReduce Exemples Exemple 1: Comptage du nombre de mots Quatre Mappers et deux Reduces : La phase Map I Chacun des quatre mappers va travailler sur une partie du fichier en entrée, par exemple : Le mapper n◦ 1 va traiter la ligne 1. Le mapper n◦ 2 va traiter la ligne 2. Le mapper n◦ 3 va traiter la ligne 3. Le mapper n◦ 4 va traiter la ligne 4. I Chaque mapper va produire un fichier de résultats intermédiaires : Minyar Sassi Hidri Technologies pour le Big Data 92 / 227
  • 94.
    MapReduce Exemples Exemple 1: Comptage du nombre de mots Quatre Mappers et deux Reduces : Entre la phase Map et la phase Reduce I Avant le transfert des résultats intermédiaires des mappers vers les reducers : Les enregistrements sont triés par clé. Tous les enregistrements correspondant à une même clé sont envoyés vers un seul et même reducer. I Hadoop garantit : Que si un reducer rec¸oit le couple am,1 du mapper1, alors il recevra aussi le couple am,1 du mapper4. Que tous les enregistrements correspondant à la clé am seront regroupés et envoyés au même reducer. I On est ainsi sûr que le comptage sera exact. I Les fichiers en entrée des reducers seront par exemple : Minyar Sassi Hidri Technologies pour le Big Data 93 / 227
  • 95.
    MapReduce Exemples Exemple 1: Comptage du nombre de mots Quatre Mappers et deux Reduces : La phase Reduce Les fichier en sortie des reducers seront alors les suivants : Il ne reste plus qu’à fusionner les fichiers issus des deux reducers pour obtenir le résultat cherché. Par rapport au premier cluster (un mapper et un reducer), ce nouveau cluster (quatre mappers et deux reducers) permet : - De diviser par un facteur de l’ordre de quatre le temps d’exécution de la phase Map. - De diviser par un facteur de l’ordre de deux le temps d’exécution de la phase Reduce. Le gain peut paraître dérisoire dans notre exemple dont l’intérêt est avant tout pédagogique mais, dans la réalité, Hadoop a permis à des entreprises de diviser par un facteur 10 les temps d’exécution de certains travaux informatiques. Une telle amélioration peut être vitale lorsque les travaux concernés doivent tourner tous les jours, et que leur temps d’exécution dans un environnement informatique classique avoisine les 24 heures. Minyar Sassi Hidri Technologies pour le Big Data 94 / 227
  • 96.
    MapReduce Exemples Exemple 2: Graphe social (1) On administre un réseau social comportant des millions d’utilisateurs. Pour chaque utilisateur, on a dans notre BD la liste des utilisateurs qui sont ses amis sur le réseau (via une requête SQL). On souhaite afficher quand un utilisateur va sur la page d’un autre utilisateur une indication Vous avez N amis en commun ; On ne peut pas se permettre d’effectuer une série de requêtes SQL à chaque fois que la page est accédée (trop lourd en traitement). ⇒ On va donc développer des programmes Map et Reduce pour cette opération et exécuter le traitement toutes les nuits sur notre BD, en stockant le résultat dans une nouvelle table. Minyar Sassi Hidri Technologies pour le Big Data 95 / 227
  • 97.
    MapReduce Exemples Exemple 2: Graphe social (2) Ici, nos données d’entrée sont sous la forme Utilisateur ⇒ Amis : A ⇒ B, C, D B ⇒ A, C, D, E C ⇒ A, B, D, E D ⇒ A, B, C, E E ⇒ B, C, D Puisqu’on est intéressé par l’information amis en commun entre deux utilisateurs et qu’on aura à terme une valeur par clé, on va choisir pour clé la concaténation entre deux utilisateurs. Par exemple, la clé A−B désignera les amis en communs des utilisateurs A et B. On peut segmenter les données d’entrée là aussi par ligne. Minyar Sassi Hidri Technologies pour le Big Data 96 / 227
  • 98.
    MapReduce Exemples Exemple 2: Graphe social (3) La phase Map Notre opération Map va se contenter de prendre la liste des amis fournie en entrée, et va générer toutes les clés distinctes possibles à partir de cette liste. La valeur sera simplement la liste d’amis, telle quelle. On fait également en sorte que la clé soit toujours triée par ordre alphabétique (clé B − A sera exprimée sous la forme A − B). Ce traitement peut paraître contre-intuitif, mais il va à terme nous per- mettre d’obtenir, pour chaque clé distincte, deux couples (key, value) : les deux listes d’amis de chacun des utilisateurs qui composent la clé. Minyar Sassi Hidri Technologies pour le Big Data 97 / 227
  • 99.
    MapReduce Exemples Exemple 2: Graphe social (4) La phase Map Le pseudo code de notre opération Map est le suivant : Par exemple, pour la première ligne : On obtiendra les couples (key, value) : Minyar Sassi Hidri Technologies pour le Big Data 98 / 227
  • 100.
    MapReduce Exemples Exemple 2: Graphe social (5) La phase Map Pour la seconde ligne : On obtiendra ainsi : Pour la troisième ligne : On aura : ...et ainsi de suite pour nos 5 lignes d’entrée Minyar Sassi Hidri Technologies pour le Big Data 99 / 227
  • 101.
    MapReduce Exemples Exemple 2: Graphe social (6) Entre la phase Map et la phase Reduce Une fois l’opération Map effectuée, Hadoop va récupérer les couples (key, valeur) de tous les fragments et les grouper par clé distincte. Le résultat sur la base de nos données d’entrée : ...on obtient bien, pour chaque clé USER1 − USER2, deux listes d’amis : les amis de USER1 et ceux de USER2. Minyar Sassi Hidri Technologies pour le Big Data 100 / 227
  • 102.
    MapReduce Exemples Exemple 2: Graphe social (7) La phase Reduce Il nous faut enfin écrire notre programme Reduce. Il va recevoir en entrée toutes les valeurs associées à une clé. Son rôle va être très simple : déterminer quels sont les amis qui apparaissent dans les listes (les valeurs) qui nous sont fournies. Minyar Sassi Hidri Technologies pour le Big Data 101 / 227
  • 103.
    MapReduce Exemples Exemple 2: Graphe social (8) La phase Reduce Après exécution de l’opération Reduce pour les valeurs de chaque clé unique, on obtiendra donc, pour une clé A − B, les utilisateurs qui apparaissent dans la liste des amis de A et dans la liste des amis de B. Autrement dit, on obtiendra la liste des amis en commun des utilisateurs A et B. Le résultat est : On sait ainsi que A et B ont pour amis communs les utilisateurs C et D, ou encore que B et C ont pour amis communs les utilisateurs A, D et E. Minyar Sassi Hidri Technologies pour le Big Data 102 / 227
  • 104.
    MapReduce Exemples Exemple 2: Graphe social (9) Synthèse I En utilisant le modèle MapReduce, on a ainsi pu créer deux programmes très simples (nos programmes Map et Reduce) de quelques lignes de code seule- ment, qui permettent d’effectuer un traitement somme toute assez complexe. I Mieux encore, notre traitement est parallélisable : même avec des dizaines de millions d’utilisateurs, du moment qu’on a assez de machines au sein du cluster Hadoop, le traitement sera effectué rapidement. Pour aller plus vite, il nous suffit de rajouter plus de machines. I Pour notre réseau social, il suffira d’effectuer ce traitement toutes les nuits à heure fixe, et de stocker les résultats dans une table. Ainsi, lorsqu’un utilisateur visitera la page d’un autre utilisateur, un seul SE- LECT dans la BD suffira pour obtenir la liste des amis en commun - avec un poids en traitement très faible pour le serveur. Minyar Sassi Hidri Technologies pour le Big Data 103 / 227
  • 105.
    Chapitre 3 -Programmation MapReduce sous Hadoop 1 Architecture fonctionnelle 2 MapReduce du point de vue du développeur Java : Les entrées / Sorties 3 Création d’un projet Java Wordcount sous Eclipse 4 Hadoop Streaming Minyar Sassi Hidri Technologies pour le Big Data 104 / 227
  • 106.
    Architecture fonctionnelle 1 Architecturefonctionnelle 2 MapReduce du point de vue du développeur Java : Les entrées / Sorties 3 Création d’un projet Java Wordcount sous Eclipse 4 Hadoop Streaming Minyar Sassi Hidri Technologies pour le Big Data 105 / 227
  • 107.
    Architecture fonctionnelle Principe deprogrammation Pour résoudre un problème via la méthodologie MapReduce avec Hadoop, on doit : 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 clé utiliser pour notre problème. Écrire le programme pour l’opération Map. Écrire le programme pour l’opération Reduce. ...et Hadoop se chargera du reste (problématiques calcul distribué, groupement par clé distincte entre Map et Reduce, etc.). Minyar Sassi Hidri Technologies pour le Big Data 106 / 227
  • 108.
    Architecture fonctionnelle Architecture fonctionnelle(1) Comme pour HDFS, la gestion des tâches de Hadoop se base sur deux serveurs (des daemons) : 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 don- nées de sortie (toujours sur HDFS). Il y a un seul JobTracker sur une seule machine du clus- ter Hadoop. Le JobTracker est en communi- cation avec le NN 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. Minyar Sassi Hidri Technologies pour le Big Data 107 / 227
  • 109.
    Architecture fonctionnelle Architecture fonctionnelle(2) I Comme le JobTracker est conscient de la position des données (grâce au NN), il peut facilement déterminer les meilleures machines auxquelles attribuer les sous-tâches (celles où les blocs de données correspondants sont stockés). I Pour effectuer un traitement Hadoop, on va donc : Stocker nos données d’entrée sur HDFS. Créer un répertoire où Hadoop stockera les résultats sur HDFS. Compiler nos programmes Map et Reduce au sein d’un .jar Java. I On soumettra alors le nom des fichiers d’entrée, le nom du répertoire des résul- tats, et le .jar lui-même au JobTracker : il s’occupera du reste (et notamment de transmettre les programmes Map et Reduce aux serveurs TaskTracker des machines du cluster). Minyar Sassi Hidri Technologies pour le Big Data 108 / 227
  • 110.
    Architecture fonctionnelle Architecture fonctionnelle(3) Le JobTracker I Le déroulement de l’exécution d’une tâche Hadoop suit les étapes sui- vantes du point de vue du JobTracker : 1. Le client (un outil Hadoop console : $hadoop) va soumettre le travail à effectuer au JobTracker : une archive Java .jar implémentant les opérations Map et Reduce. Il va également soumettre le nom des fichiers d’entrée, et l’endroit où stocker les résultats. 2. Le JobTracker communique avec le NN HDFS pour savoir où se trouvent les blocs correspondant aux noms de fichiers donnés par le client. 3. Le JobTracker, à partir de ces informations, détermine quels sont les nœuds TaskTra- cker les plus appropriés, c’est à dire ceux qui contiennent les données sur lesquelles travailler sur la même machine, ou le plus proche possible (même rack/rack proche). 4. Pour chaque morceau des données d’entrée, le JobTracker envoie au TaskTracker sélectionné le travail à effectuer (Map/Reduce, code Java) et les blocs de données correspondant. Minyar Sassi Hidri Technologies pour le Big Data 109 / 227
  • 111.
    Architecture fonctionnelle Architecture fonctionnelle(4) Le JobTracker 5. Le JobTracker communique avec les nœuds TaskTracker en train d’exécuter les tâches. Ils envoient régulièrement un heartbeat, un message signalant qu’ils travaillent toujours sur la sous-tâche rec¸ue. Si aucun heartbeat n’est rec¸u dans une période donnée, le JobTracker considère la tâche comme ayant échouée et donne le même travail à effectuer à un autre TaskTracker. 6. Si par hasard une tâche échoue (erreur java, données incorrectes, etc.), le TaskTracker va signaler au JobTracker que la tâche n’a pas pu être exécutée. Le JobTracker va alors décider de la conduite à adopter : redonner la sous-tâche à un autre TaskTracker, demander au même TaskTracker de ré-essayer, marquer les données concernées comme invalides, etc. Il pourra même blacklister le TaskTracker concerné comme non-fiable dans certains cas. 7. Une fois que toutes les opérations envoyées aux TaskTracker (Map + Reduce) ont été effec- tuées et confirmées comme effectuées par tous les noeuds, le JobTracker marque la tâche comme effectuée. Des informations détaillées sont disponibles (statistiques, TaskTracker ayant posé problème, etc.). Minyar Sassi Hidri Technologies pour le Big Data 110 / 227
  • 112.
    Architecture fonctionnelle Architecture fonctionnelle(5) Le JobTracker I On peut également obtenir à tout moment de la part du JobTracker des informations sur les tâches en train d’être effectuées : étape actuelle (Map, Shuffle, Reduce), % de complétion, etc.. I La soumission du .jar, l’obtention de ces informations, et d’une manière générale toutes les opérations liées à Hadoop s’effectuent avec le même unique client console vu précédem- ment : $hadoop. I De manière similaire au NN de HDFS, il n’y a qu’un seul JobTracker et s’il tombe en panne, le cluster tout entier ne peut plus effectuer de tâches. La aussi, des résolutions aux problème sont prévues dans la roadmap Hadoop. I Généralement, on place le JobTracker et le NN HDFS sur la même machine (une machine plus puissante que les autres), sans y placer de TaskTracker/DN 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 nœud maître (Master Node). Les autres nœuds (contenant TaskTracker + DN) sont communément appelés nœuds esclaves (Slave Node). I Même si le JobTracker est situé sur une seule machine, le client qui envoie la tâche au JobTracker initialement peut être exécuté sur n’importe quelle machine du cluster - comme les TaskTracker sont presents sur la machine, ils indiquent au client comment joindre le JobTracker. Minyar Sassi Hidri Technologies pour le Big Data 111 / 227
  • 113.
    Architecture fonctionnelle Architecture fonctionnelle(6) Le TaskTracker I Lorsque le TaskTracker rec¸oit une nouvelle tâche à effectuer (Map, Reduce, Shuffle) depuis le JobTracker, le TaskTracker va démarrer une nouvelle ins- tance de Java avec le fichier .jar fourni par le JobTracker, en appelant l’opé- ration correspondante. I Une fois la tâche démarrée, il enverra régulièrement au JobTracker ses mes- sages heartbeats. I Lorsqu’une sous-tâche est terminée, le TaskTracker envoie un message au JobTracker pour l’en informer, que la tâche se soit bien déroulée ou non (il indique évidemment le résultat au JobTracker). Minyar Sassi Hidri Technologies pour le Big Data 112 / 227
  • 114.
    MapReduce du pointde vue du développeur Java 1 Architecture fonctionnelle 2 MapReduce du point de vue du développeur Java : Les entrées / Sorties 3 Création d’un projet Java Wordcount sous Eclipse 4 Hadoop Streaming Minyar Sassi Hidri Technologies pour le Big Data 113 / 227
  • 115.
    MapReduce du pointde vue du développeur Java Les entrées-sorties (1) I Dans MapReduce, les données sont toujours lues ou écrites selon le format (key, value). Cette fac¸on de procéder peut paraître réductrice, mais en fait : On s’aperc¸oit à l’usage qu’il est possible, avec un peu d’expérience et d’astuce, de traiter beaucoup de problèmes de cette manière, y compris, par exemple, la recherche du plus court chemin dans un graphe orienté acyclique. Le fait d’imposer une structure unique et simple aux enregistre- ments, tant en lecture qu’en écriture, contribue à l’efficacité d’Ha- doop au niveau des entrées-sorties. Minyar Sassi Hidri Technologies pour le Big Data 114 / 227
  • 116.
    MapReduce du pointde vue du développeur Java Les entrées-sorties (2) I Les données lues par le mapper sont définies au niveau du driver. La définition des données comprend : Leur localisation (fichier ou répertoire). Le type des enregistrements, qui est défini par la classe InputFormat. La détermination de la taille des InputSplits : un InputSplit définit le volume des données qui seront lues à chaque opération de lecture : - L’InputSplit a le plus souvent la taille d’un bloc HDFS, mais ce n’est pas une obligation. - Il est du ressort de Hadoop de faire le lien entre enregistrements et InputSplits d’une part, et entre InputSplits et blocs HDFS d’autre part. - Il n’y a en effet aucune garantie que la fin d’un bloc corresponde à la fin d’un enregistrement. Minyar Sassi Hidri Technologies pour le Big Data 115 / 227
  • 117.
    MapReduce du pointde vue du développeur Java Les entrées-sorties (3) I Hadoop prend en compte par défaut les types d’enregistrement sui- vants : TextInputFormat : - Type par défaut. - value est une ligne entière terminée par n. - key est l’offset de la ligne depuis le début de fichier (elle est souvent sans intérêt pour le problème à traiter et, dans ce cas, il suffit de l’ignorer). KeyValueTextInputFormat : - Chaque ligne est supposée être au format <key><separator><value> n. - Le separator par défaut est tab. SequenceFileInputFormat : - Permet de lire un fichier binaire de paires <key, value>, comprenant éventuel- lement des métadonnées. SequenceFileAsTextInputFormat : - Format identique au précédent mais, en plus, convertit les clés et les valeurs en strings (<key.toString(), value.toString()>). Minyar Sassi Hidri Technologies pour le Big Data 116 / 227
  • 118.
    MapReduce du pointde vue du développeur Java Les entrées-sorties (4) I Dans Hadoop : Les clés sont des objets qui implémentent l’interface ComparableWritable. Les valeurs sont des objets qui implémentent l’interface Writable. I L’utilisation de l’interface Writable permet d’optimiser le processus de sérialisation lors des accès disque. Tout type de données dans Hadoop doit implémenter Writable. I Par défaut, Hadoop propose les types de données suivants : IntWritable (int en Java). LongWritable (long en Java). FloatWritable (float en Java). DoubleWritable (double en Java). Text (string en Java). etc.. Minyar Sassi Hidri Technologies pour le Big Data 117 / 227
  • 119.
    MapReduce du pointde vue du développeur Java Programmation MapReduce sous Hadoop I Comme indiqué précédemment, Hadoop est développé en Java. Les tâches Map/Reduce sont donc implémentables par le biais d’interfaces Java (il existe cependant des wrappers très simples permettant d’implémenter ses tâches dans n’importe quel langage). I Un programme Hadoop se compile au sein d’un .jar. I 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 (key, value) 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’operation Map). Une classe Reduce (qui effectuera l’operation Reduce). Minyar Sassi Hidri Technologies pour le Big Data 118 / 227
  • 120.
    MapReduce du pointde vue du développeur Java Programmation Hadoop La classe Driver I La classe Driver contient le main de notre programme. I 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. L’objet en question pourrait aussi nous permettre de récupérer nous-même des options de configuration qui nous intéressent. - 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 ; on souhaite que l’utilisateur puisse préciser le nom du fichier d’entrée et le nom du répertoire de sortie HDFS pour nos tâches Hadoop grâce à la ligne de commande. 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 (key,value) Map et Reduce. Informer Hadoop des fichiers d’entrée/sortie pour notre tâche sur HDFS. Enfin, utiliser l’objet Job crée précédemment pour déclencher le lancement de la tâche via le cluster Hadoop. Minyar Sassi Hidri Technologies pour le Big Data 119 / 227
  • 121.
    MapReduce du pointde vue du développeur Java Programmation Hadoop - Classe Driver Exemple : Occurrences de mots (1) I Le prototype de notre fonction main() : public static void main(String[] args) throws Exception On se sert de args pour récupérer les arguments de la ligne de commande. Plusieurs fonctions Hadoop appelées au sein du main sont susceptibles de déclencher des exceptions - on l’indique donc lors de la déclaration. I Avant toute chose, on créé dans notre main un nouvel objet Configuration Hadoop : // Créé un objet de configuration Hadoop. Configuration conf=new Configuration() ; Le package à importer est : org.apache.hadoop.conf.Configuration I Avant toute chose, on créé dans notre main un nouvel objet Configuration Hadoop : I On créé ensuite un nouvel objet Hadoop Job : Job job=Job.getInstance(conf, ”Compteur de mots v1.0”) ; Le package à importer est le suivant : org.apache.hadoop.mapreduce.Job Minyar Sassi Hidri Technologies pour le Big Data 120 / 227
  • 122.
    MapReduce du pointde vue du développeur Java Programmation Hadoop - Classe Driver Exemple : Occurrences de mots (2) I Ensuite, il faut indiquer à Hadoop - par le biais de l’objet Job nouvellement créé - quelles sont les classes Driver, Map et Reduce de notre programme Hadoop. Dans notre cas, il s’agira respectivement des classes WCount, WCountMap et WCountRe- duce du package org.mbds.hadoop.wordcount On utilise pour ce faire les fonctions suivantes : job.setJarByClass(WCount.class) ; job.setMapperClass(WCountMap.class) ; job.setReducerClass(WCountReduce.class) ; I Il faut ensuite indiquer à Hadoop quels sont les types de données que l’ont souhaite utiliser pour les couples (key,valeur) de nos opérations map et reduce. Dans le cas de notre compteur d’occurrences de mots, on souhaite utiliser des chaînes de caractères pour les clefs (nos mots) et des entiers pour nos occurrences. Remarque : On ne doit pas utiliser les types classiques Int et String Java pour désigner nos types, mais des classes qui leur correspondent et qui sont propres à Hadoop. Dans notre cas, les classes IntWritable et Text. job.setOutputKeyClass(Text.class) ; job.setOutputValueClass(IntWritable.class) ; Les packages des types en question : org.apache.hadoop.io.IntWritable et org.apache.hadoop.io.Text Il en existe beaucoup d’autres dans org.apache.hadoop.io.∗. Minyar Sassi Hidri Technologies pour le Big Data 121 / 227
  • 123.
    MapReduce du pointde vue du développeur Java Programmation Hadoop - Classe Driver Exemple : Occurrences de mots (3) I Ensuite, on doit indiquer où se situent nos données d’entrée et de sortie dans HDFS. On utilise pour ce faire les classes Hadoop FileInputFormat et FileOutputFormat. I Ces classes sont implémentées suivant un design pattern Singleton - il n’est pas nécessaire de les instancier dans le cas qui nous intéresse (dans des cas plus complexe, on étendra parfois la classe en question dans une nouvelle classe qui nous est propre). On procède de la manière suivante : FileInputFormat.addInputPath(job, new Path(ourArgs[0])) ; FileOutputFormat.setOutputPath(job, new Path(ourArgs[1])) ; Les packages à utiliser : - org.apache.hadoop.mapreduce.lib.input.FileInputFormat - org.apache.hadoop.mapreduce.lib.input.FileOutputFormat - org.apache.hadoop.fs.Path Minyar Sassi Hidri Technologies pour le Big Data 122 / 227
  • 124.
    MapReduce du pointde vue du développeur Java Programmation Hadoop - Classe Driver Exemple : Occurrences de mots (4) I Enfin, il reste à lancer l’exécution de la tâche par le biais du cluster Hadoop. On procède ainsi : if(job.waitForCompletion(true)) System.exit(0) ; System.exit(-1) ; I La fonction waitForCompletion de l’objet job va exécuter la tâche et attendre la fin de son exécution. I Elle prend comme argument un booléen indiquant à Hadoop si oui ou non il doit donner des indications sur la progression de l’exécution à l’utilisateur sur la sortie standard (stdout). I Elle renvoie true en cas de succés ; ici, on terminera l’exécution du programme en renvoyant 0 si tout s’est bien passé, et -1 en cas de problème (codes de retour unix standards). Minyar Sassi Hidri Technologies pour le Big Data 123 / 227
  • 125.
    MapReduce du pointde vue du développeur Java Programmation Hadoop - Classe Driver Exemple : Occurrences de mots (5) // Notre classe Driver (contient le main du programme Hadoop). public class WCount { // Le main du programme. public static void main(String[] args) throws Exception { // Créé un object de configuration Hadoop. Configuration conf=new Configuration() ; // Permet à Hadoop de lire ses arguments génériques, récupère les arguments restants dans ourArgs. String[] ourArgs=new GenericOptionsParser(conf,args).getRemainingArgs() ; // Obtient un nouvel objet Job : une tâche Hadoop. On // fourni la configuration Hadoop ainsi qu’une description textuelle de la tâche. Job job=Job.getInstance(conf, ”Compteur de mots v1.0”) ; // Défini les classes driver, map et reduce. job.setJarByClass(WCount.class) ; job.setMapperClass(WCountMap.class) ; job.setReducerClass(WCountReduce.class) ; // Défini types clefs/valeurs de notre programme Hadoop. job.setOutputKeyClass(Text.class) ; job.setOutputValueClass(IntWritable.class) ; // Définit les fichiers d’entrée du programme et le répertoire des résultats. // On se sert du premier et du deuxième argument restants pour permettre à // l’utilisateur de les spécifier lors de l’exécution. FileInputFormat.addInputPath(job, new Path(ourArgs[0])) ; FileOutputFormat.setOutputPath(job, new Path(ourArgs[1])) ; // On lance la tâche Hadoop. Si elle s’est effectuée correctement, on renvoie 0. Sinon, on renvoie -1. if(job.waitForCompletion(true)) System.exit(0) ; System.exit(-1) ; } } Minyar Sassi Hidri Technologies pour le Big Data 124 / 227
  • 126.
    MapReduce du pointde vue du développeur Java Programmation Hadoop La classe Map I La classe Map va être en charge de l’opération Map de notre programme. I Elle doit étendre la classe Hadoop org.apache.hadoop.mapreduce.Mapper. I Il s’agit d’une classe générique qui se paramétrise avec quatre types : Un type keyin : le type de clé d’entrée. Un type valuein : le type de valeur d’entrée. Un type keyout : le type de clé de sortie. Un type valueout : le type de valeur de sortie. I Le type keyin est notamment utile lorsqu’on utilise des fonctionnalités plus avancées, comme la possibilité d’effectuer plusieurs opérations Map les unes à la suite des autres, auquel cas notre opération Map recevra en entrée des couples (key,value). I Dans notre cas, nous n’utiliserons pas cette possibilité ; on utilisera donc le type Java Object comme type keyin. Minyar Sassi Hidri Technologies pour le Big Data 125 / 227
  • 127.
    MapReduce du pointde vue du développeur Java Programmation Hadoop - Classe Map Exemple : Occurrences de mots (1) Dans notre exemple, notre classe Map sera déclarée ainsi : public class WCountMap extends Mapper<Object, Text, Text, IntWritable> On utilise ici comme types : Text pour le type valuein, puisque notre valeur d’entrée à la fonction Map est une chaîne de caractères (une ligne de texte). Text pour le type keyout, puisque notre valeur de clé pour les couples (key,vakue) de la fonction Map est également une chaîne de caractères (le mot dont on compte les occur- rences). IntWritable pour le type valueout, puisque notre valeur pour les couples (key,value) de la fonction Map est un entier (le nombre d’occurrences). Ici aussi, on utilise les types Hadoop et non les types natifs Java (Int et String). Minyar Sassi Hidri Technologies pour le Big Data 126 / 227
  • 128.
    MapReduce du pointde vue du développeur Java Programmation Hadoop - Classe Map Exemple : Occurrences de mots (2) Au sein de la classe Mapper, c’est la fonction map qui va s’occuper d’effectuer la tâche Map. C’est la seule qu’on doit absolument implémenter. Elle prend trois arguments : - La clé d’entrée keyin. La valeur d’entrée valuein (la ligne de texte dont on souhaite compter les mots). - Un Context Java qui représente un handle Hadoop et nous permettra de retourner les couples (key,value) résultant de notre opération Map. Le prototype de notre fonction map : protected void map(Object key, Text value, Context context) throws IOException, InterruptedException Comme pour la fonction main, la fonction map appellera des fonctions susceptibles de déclencher des exceptions (notamment concernant l’interruption de l’exécution Hadoop ou des problèmes d’accès HDFS) - on le précise donc dans sa déclaration. Minyar Sassi Hidri Technologies pour le Big Data 127 / 227
  • 129.
    MapReduce du pointde vue du développeur Java Programmation Hadoop - Classe Map Exemple : Occurrences de mots (3) Au sein de la méthode map, on va donc effectuer la tâche Map de notre programme Map/Reduce. Dans le cadre de notre exemple, la fonction devra parcourir la ligne de texte fournie en entrée, et renvoyer un couple (key,value) pour chacun des mots. Ce couple devra avoir pour clé le mot en question, et pour valeur l’entier 1. Dans la fonction map, afin d’indiquer à Hadoop qu’on souhaite renvoyer un couple (key,value), on utilise la fonction write de notre objet Context. Elle peut être appelée autant de fois que nécessaire ; une fois pour chacun des couples (key,value) qu’on souhaite renvoyer. Par exemple context.write(”am”, 1). Il faut évidemment que la clé et la valeur renvoyées ainsi correspondent aux types keyout et valueout de notre classe Mapper. Minyar Sassi Hidri Technologies pour le Big Data 128 / 227
  • 130.
    MapReduce du pointde vue du développeur Java Programmation Hadoop - Classe Map Exemple : Occurrences de mots (4) package org.mbds.hadoop.wordcount ; import org.apache.hadoop.mapreduce.Job ; import org.apache.hadoop.io.Text ; import org.apache.hadoop.io.IntWritable ; import java.util.StringTokenizer ; import org.apache.hadoop.mapreduce.Mapper ; import java.io.IOException ; // Notre classe Map. public class WCountMap extends Mapper<Object, Text, Text, IntWritable> { // IntWritable contant de valeur 1. private static final IntWritable ONE=new IntWritable(1) ; // La fonction map elle-même. protected void map(Object offset, Text value, Context context) throws IOException, InterruptedException { // Un StringTokenizer va nous permettre de parcourir chacun des mots de la ligne passée à Map. StringTokenizer tok=new StringTokenizer(value.toString(), ” ”) ; while(tok.hasMoreTokens()) { Text word=new Text(tok.nextToken()) ; // On renvoie notre couple (clef ;valeur) : le mot courant suivi de la valeur 1. context.write(word, ONE) ; } } } Minyar Sassi Hidri Technologies pour le Big Data 129 / 227
  • 131.
    MapReduce du pointde vue du développeur Java Programmation Hadoop La classe Reduce I La classe reduce va être en charge de l’opération Reduce de notre programme. I Elle doit étendre la classe Hadoop org.apache.hadoop.mapreduce.Reducer. I Il s’agit là aussi d’une classe générique qui se paramétrise avec les mêmes quatre types que pour la classe Mapper : keyin, valuein, keyout et valueout. I On rappelle que l’opération Reduce recevra en entrée une clé unique, associée à toutes les valeurs pour la clé en question. I Dans le cas du compteur d’occurrences de mots, on recevra en entrée une valeur unique pour la clé, par exemple am, suivi de toutes les valeurs qui ont été rencontrées à la sortie de l’opération Map pour la clé am (par exemple deux fois la valeur 1 si le mot am était présent deux fois dans notre texte d’exemple). Minyar Sassi Hidri Technologies pour le Big Data 130 / 227
  • 132.
    MapReduce du pointde vue du développeur Java Programmation Hadoop - Classe Reduce Exemple : Occurrences de mots (1) Dans notre exemple, la classe Reduce sera définie comme suit : public class WCountReduce extends Reducer<Text, IntWritable, Text, Text> On utilise pour chacun des types paramétrables : Text pour keyin : il s’agit de notre clé unique d’entrée - le mot concerné. IntWritable pour valuein : le type de nos valeurs associées à cette clé (le nombre d’occur- rences, un entier). Text pour keyout : le type de clé de sortie. Nous ne modifierons pas la clé, il s’agira toujours du mot unique concerné - on utilise donc Text. Text pour valueout : le type de valeur de sortie. On utilise ici Text - on renverra le nombre total d’occurrences pour le mot concerné sous la forme d’une chaîne de caractères (on pourrait également utiliser IntWritable ici). Là aussi, on utilise les types de données propres à Hadoop. Minyar Sassi Hidri Technologies pour le Big Data 131 / 227
  • 133.
    MapReduce du pointde vue du développeur Java Programmation Hadoop - Classe Reduce Exemple : Occurrences de mots (2) Au sein de la classe reducer, c’est la fonction reduce qui va effectuer l’opération Reduce. C’est la seule qu’on doit implémenter. Elle prend trois arguments : la clé concernée, un Iterable java (une liste) de toutes les valeurs qui lui sont associées et qui ont été renvoyées par l’opération Map, et enfin un objet Context java similaire à celui de la fonction map de la classe Mapper, et qui nous permettra de renvoyer notre valeur finale, associée à la clé. Dans notre exemple, la déclaration de la fonction reduce : public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException Comme pour map, la fonction fait appel à des fonctions Hadoop susceptibles de provoquer des exceptions - on l’indique ici aussi. Minyar Sassi Hidri Technologies pour le Big Data 132 / 227
  • 134.
    MapReduce du pointde vue du développeur Java Programmation Hadoop - Classe Reduce Exemple : Occurrences de mots (3) Au sein de la fonction Reduce, on pourra renvoyer un couple (key,value) en résultat exac- tement de la même manière que pour la fonction map, par le biais d’un appel à la fonction write de notre objet Context. Par exemple : context.write(”am”, ”2 occurrences”) ; Contrairement à la fonction map, en revanche, on cherche à ne produire qu’une et une seule valeur de retour pour la clé concernée. On n’appellera donc la fonction write qu’une seule fois. Remarque : en théorie et dans des cas plus complexes, on pourrait là aussi appeler la fonction à plusieurs reprises, pour renvoyer plusieurs couples (key,value). En revanche, Ha- doop n’appliquera aucun traitement dessus et les considérera simplement comme plusieurs résultats finaux. Minyar Sassi Hidri Technologies pour le Big Data 133 / 227
  • 135.
    MapReduce du pointde vue du développeur Java Programmation Hadoop - Classe Reduce Exemple : Occurrences de mots (4) package org.mbds.hadoop.wordcount ; import org.apache.hadoop.io.Text ; import org.apache.hadoop.io.IntWritable ; import org.apache.hadoop.mapreduce.Reducer ; import java.util.Iterator ; import java.io.IOException ; // Notre classe Reduce - paramétrée avec un type Text pour la clé, un type de valeur // IntWritable, et un type de retour (le retour final de la fonction Reduce) Text. public class WCountReduce extends Reducer<Text, IntWritable, Text, Text> { // La fonction Reduce elle-même. Les arguments : la clé key, un Iterable de toutes les valeurs qui sont associées // à la clé en question, et le contexte Hadoop (un handle qui nous permet de renvoyer le résultat à Hadoop) public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { // Pour parcourir toutes les valeurs associées à la clé fournie. Iterator<IntWritable> i=values.iterator() ; int count=0 ; // Notre total pour le mot concerné. while(i.hasNext()) // Pour chaque valeur... count+=i.next().get() ; // ...on l’ajoute au total. // On renvoie le couple (clef ;valeur) constitué de notre clef key et du total, au format Text. context.write(key, new Text(count+” occurrences.”)) ; } } Minyar Sassi Hidri Technologies pour le Big Data 134 / 227
  • 136.
    Création d’un projetJava Wordcount sous Eclipse 1 Architecture fonctionnelle 2 MapReduce du point de vue du développeur Java : Les entrées / Sorties 3 Création d’un projet Java Wordcount sous Eclipse 4 Hadoop Streaming Minyar Sassi Hidri Technologies pour le Big Data 135 / 227
  • 137.
    Création d’un projetJava Wordcount sous Eclipse Création d’un projet Java Wordcount sous Eclipse Création d’un nouveau projet Lien : http ://fr.slideshare.net/andreaiacono/mapreduce-34478449 ?related=1 http ://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/ Minyar Sassi Hidri Technologies pour le Big Data 136 / 227
  • 138.
    Création d’un projetJava Wordcount sous Eclipse Création d’un projet Java Wordcount sous Eclipse Importation des libraires externes (1) Minyar Sassi Hidri Technologies pour le Big Data 137 / 227
  • 139.
    Création d’un projetJava Wordcount sous Eclipse Création d’un projet Java Wordcount sous Eclipse Importation des libraires externes (2) Minyar Sassi Hidri Technologies pour le Big Data 138 / 227
  • 140.
    Création d’un projetJava Wordcount sous Eclipse Création d’un projet Java Wordcount sous Eclipse Création d’une nouvelle classe WordCount Pour plus de détail consultez : http ://kickstarthadoop.blogspot.com/2011/04/word-count-hadoop-map-reduce-example.html. Minyar Sassi Hidri Technologies pour le Big Data 139 / 227
  • 141.
    Création d’un projetJava Wordcount sous Eclipse Création d’un projet Java Wordcount sous Eclipse Exportation du Jar Minyar Sassi Hidri Technologies pour le Big Data 140 / 227
  • 142.
    Création d’un projetJava Wordcount sous Eclipse Exécution du Jar sous Hadoop avec la distribution Cloudera Notre entrée [clouderaquickstart ∼]$hadoop fs -cat /home/cloudera/wordcount.txt Hello Hadoop Goodbye Hadoop Affichage du contenu du système de fichiers : [cloudera@quickstart ∼]$ hadoop fs -ls Found 3 items drwx—— - cloudera cloudera 0 2015-03-24 09 :41 .Trash drwx—— - cloudera cloudera 0 2015-03-24 19 :01 .staging drwxr-xr-x - cloudera cloudera 0 2015-03-24 19 :01 oozie-oozi Copie du fichier dans HDFS [clouderaquickstart ∼]$ hadoop fs -mkdir Data Input [clouderaquickstart ∼]$ hadoop fs -put /home/cloudera/wordcount.txt Data Input/ [clouderaquickstart ∼]$ hadoop fs -ls Data Input Found 1 items -rw-r–r– 1 cloudera cloudera 30 2015-03-24 20 :23 input/wordcount.txt [clouderaquickstart ∼]$ hadoop fs -cat input/wordcount.txt Hello Hadoop, Goodbye Hadoop. [clouderaquickstart ∼]$ Exécution [clouderaquickstart ∼]$ hadoop jar /home/cloudera/WCount.jar WCount Data Input/wordcount.txt Output Affichage du contenu du répertoire Output [clouderaquickstart ∼]$ hadoop fs -ls output Affichage du résultat [clouderaquickstart ∼]$ hadoop fs -cat Output/part-00000 Goodbye 1 Hadoop 2 Hello 1 Minyar Sassi Hidri Technologies pour le Big Data 141 / 227
  • 143.
    Création d’un projetJava Wordcount sous Eclipse Exécution du Jar sous Hadoop avec la distribution Cloudera Résultat Hadoop stocke les résultats dans une série de fichiers part-r-XXXX, où XXXX est un compteur incremental. L’idée est ici de stocker de grandes quantités de résultats dans de nombreux fichiers différents, qui seront en conséquences distribués sur tout le cluster HDFS. Le nom du fichier est paramétrable dans la configuration Hadoop. On a un fichier Ąpart-r par opération Reduce exécutée. Le r au sein du nom signifie Reduce. On peut également demander à Hadoop d’effectuer uniquement les opérations Map (par exemple pour du debug), auquel cas on aura une série de fichiers Ąpart-m. Un fichier SUCCESS (vide) est également crée dans le repertoire des résultats en cas de succès. Cela permet de contrôler que tout s’est bien passe rapidement (avec un simple hadoop fs -ls sur HDFS). Minyar Sassi Hidri Technologies pour le Big Data 142 / 227
  • 144.
    Création d’un projetJava Wordcount sous Eclipse Autres exemples I Occurrences de mots : Java : http ://www.bogotobogo.com/Hadoop/BigData hadoop Creating Java Wordcount Project with Eclipse MapReduce2 Part2.php Python : http ://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce -program-in-python/ I Jeu de carte : Java : https ://github.com/eljefe6a/UnoExample Python : https ://github.com/eljefe6a/UnoExample/tree/master/scripts I Températures Max et Min : Java : https ://letsdobigdata.wordpress.com/2013/12/07/running-hadoop-mapreduce- application-from-eclipse-kepler/ Python : https ://github.com/tomwhite/hadoop-book/tree/master/ch02-mr-intro/src/ main/python Autres langages : https ://github.com/tomwhite/hadoop-book/tree/master/ch02- mr-intro/src/main I Jointure : Java : https ://gist.github.com/airawat/6666608 Python : https ://chamibuddhika.wordpress.com/2012/02/26/joins-with-map-reduce/ I Ventes : https ://github.com/P7h/IntroToHadoopAndMR Udacity Course Minyar Sassi Hidri Technologies pour le Big Data 143 / 227
  • 145.
    Création d’un projetJava Wordcount sous Eclipse Quelques remarques générales concernant les mappers et reducers I Un job Hadoop comprend au minimum un mapper : il peut ne pas comprendre de phase reduce. I Durant la phase de shuffle & sort, tous les mappers sont susceptibles d’envoyer des données vers tous les reducers. I Cette phase pourrait constituer un goulot d’étranglement en saturant le réseau : des méca- nismes au sein de Hadoop permettent d’éviter qu’une telle situation se produise : Chaque reducer fournit une partie du résultat global : si l’on souhaite disposer d’un seul fichier regroupant l’ensemble des résultats en sortie d’un job Hadoop, il faut paramétrer le job avec un seul reducer. Attention cependant à l’impact d’un tel choix sur le niveau de performance du job. Il n’existe aucune garantie quant à l’ordre de traitement des données d’un job Hadoop. Une conséquence de cette situation est que Hadoop ne peut pas traiter n’importe quel problème de manière efficace : - Rechercher un maximum ou un minimum dans un ensemble de données, compter des données... sont des exemples de problèmes qu’il est aisé de traiter avec Hadoop. - Calculer la moyenne d’un ensemble de données est un problème qu’il est plus malaisé de traiter avec Hadoop, car le calcul de la moyenne n’est pas une opération associative : si l’on divise l’ensemble des données en plusieurs parties - chacune correspondant par exemple à un mapper - la moyenne de l’ensemble ne sera généralement pas égale à la moyenne des moyennes des parties. Minyar Sassi Hidri Technologies pour le Big Data 144 / 227
  • 146.
    Hadoop Streaming 1 Architecturefonctionnelle 2 MapReduce du point de vue du développeur Java : Les entrées / Sorties 3 Création d’un projet Java Wordcount sous Eclipse 4 Hadoop Streaming Minyar Sassi Hidri Technologies pour le Big Data 145 / 227
  • 147.
    Hadoop Streaming Hadoop Streaming IAu delà de Java, Hadoop permet également l’exécution d’un programme Ha- doop écrit dans d’autres langages, par exemple en C, en Python ou encore en bash (shell scripting). I Pour ce faire, un outil est distribué avec Hadoop : streaming. Il s’agit d’un .jar qui est capable de prendre en argument des programmes ou scripts définissant les tâches Map et Reduce, ainsi que les fichiers d’entrée et le répertoire de sortie HDFS, et d’exécuter ainsi la tâche spécifiée sur le cluster. I Ce .jar est disponible dans le répertoire d’installation Hadoop et porte le nom hadoop-streaming-VERSION.jar, où VERSION est la version de Hadoop concernée. I Il s’agit en réalité d’un programme Hadoop Java classique, mais qui appelle les tâches Map et Reduce par le biais du système. Minyar Sassi Hidri Technologies pour le Big Data 146 / 227
  • 148.
    Hadoop Streaming Streaming -Map I Lorsqu’on développe un programme Map Hadoop dans un autre langage pour son utilisation avec l’outil streaming, les données d’entree doivent être lues sur l’entree standard (stdin) et les données de sorties doivent être envoyées sur la sortie standard (stdout). I En entrée du script ou programme Map, on aura une série de lignes : nos données d’entrée (par exemple dans le cas du compteur d’occurrences de mots, des lignes de notre texte). I En sortie du script ou programme Map, on doit écrire sur stdout notre série de couples (key, value) au format : Key[TABULATION]Value. ...avec une ligne distincte pour chaque (key,value). Minyar Sassi Hidri Technologies pour le Big Data 147 / 227
  • 149.
    Hadoop Streaming Streaming -Reduce I Lorsqu’on développe un programme Reduce Hadoop dans un autre langage pour son utilisation avec l’outil streaming, les données d’entree et de sortie doivent être la aussi lues/ecrites sur stdin et stdout (respectivement). I En entrée du script ou programme Reduce, on aura une série de lignes : des couples (key,value) au format : Key[TABULATION]Value. I Les couples seront triés par clé distincte, et la clé répétée à chaque fois. Par ailleurs, on est susceptible d’avoir des clés différentes au sein d’une seule et même exécution du programme reduce. I En sortie du script ou programme Reduce, on doit écrire des couples (key,value), toujours au format Key[TABULATION]Value. Remarque : d’ordinaire, on écrira évidemment un seul couple (key,value) par clé distincte. Minyar Sassi Hidri Technologies pour le Big Data 148 / 227
  • 150.
    Hadoop Streaming Exécution duJar sous Hadoop Streaming avec la distribution Cloudera Notre entrée [clouderaquickstart ∼]$ cat /home/cloudera/wordcount.txt Hello Hadoop Goodbye Hadoop Affichage du contenu du système de fichiers : [cloudera@quickstart ∼]$ hadoop fs -ls Copie du fichier dans HDFS [clouderaquickstart ∼]$ hadoop fs -mkdir Data Input [clouderaquickstart ∼]$ hadoop fs -put /home/cloudera/wordcount.txt Data Input/ [clouderaquickstart ∼]$ hadoop fs -ls Data Input Création de deux fichiers mapper.py et reducer.py : http ://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/ Attribution des rôles : [clouderaquickstart ∼]$chmod +x /home/cloudera/mapper.py [clouderaquickstart ∼]$chmod +x /home/cloudera/reducer.py Exécution [clouderaquickstart ∼]$ hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.5.0-mr1-cdh5.3.0.jar -file /home/cloudera/mapper.py -mapper /home/cloudera/mapper.py -file /home/cloudera/reducer.py -reducer /home/cloudera/reducer.py -input Data Input -output Output Affichage du résultat [clouderaquickstart ∼]$ hadoop fs -cat Output/part-00000 Goodbye 1 Hadoop 2 Hello 1 Minyar Sassi Hidri Technologies pour le Big Data 149 / 227
  • 151.
    Chapitre 4 -Traitement de données et requêtage sous Hadoop 1 Traitement des données 2 Comment réconcilier les Big Data avec le temps réel ? Lambda-architecture 3 Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Minyar Sassi Hidri Technologies pour le Big Data 150 / 227
  • 152.
    Traitement des données 1Traitement des données Traitement par lot : Batch processing Traitement par streaming : Stream processing 2 Comment réconcilier les Big Data avec le temps réel ? Lambda-architecture Big Data + Temps Réel : Pour quels use-cases ? Le système Big Data à construire Architecture Lambda 3 Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig Apache Hive Spark Minyar Sassi Hidri Technologies pour le Big Data 151 / 227
  • 153.
    Traitement des donnéesTraitement par lot : Batch processing Traitement par lot : Batch processing Présentation I Moyen efficace de traiter de grands volumes de données. I Les données sont collectées, stockées, traitées, puis les résultats fournis. I Les systèmes de batch processing ont besoin de programmes différents pour l’entrée, le traitement et la génération des données. I Le traitement est réalisé sur l’ensemble des données. I Traitement de Données Complexes (CEP : Complex Event Processing). - Concept de traitement des évènements pour identifier les évènements significatifs. - Détection de schémas complexes, corrélation, abstraction et hiérarchie entre évènements. I Hadoop MapReduce est un exemple de système utilisant le traitement par lot. Minyar Sassi Hidri Technologies pour le Big Data 152 / 227
  • 154.
    Traitement des donnéesTraitement par lot : Batch processing Traitement par lot : Batch processing Caractéristiques I A accès à toutes les données. I Peut réaliser des traitements lourds et complexes. I Est en général plus concerné par le débit (nombre d’actions réalisées en une unité de temps) que par la latence (temps requis pour réaliser l’action) des différents composants du traitement. I Sa latence est calculée en minutes (voire plus ! !). I Cible les caractéristiques volume et variété des Big Data. I Inconvénients - Toutes les données doivent être prêtes avant le début du job. - N’est pas approprié pour des traitements en ligne ou temps réel. - Latence d’exécution élevée. - Produit des résultats sur des données relativement anciennes. I Exemples : Les chèques de dépôt dans une banque sont accumulés et traités chaque jour, les statistiques par mois/jour/année, factures générées pour les cartes de crédit (en général mensuelles)... Minyar Sassi Hidri Technologies pour le Big Data 153 / 227
  • 155.
    Traitement des donnéesTraitement par streaming : Stream processing Traitement par Streaming : Stream processing Caractéristiques I Les traitements se font sur un élément ou un petit nombre de données récentes. I Le traitement est relativement simple. I Doit compléter chaque traitement en un temps proche du temps-réel. I Asynchrone : les sources de données n’interagissent pas directement avec l’unité de traitement en streaming, en attendant une réponse par exemple. I La latence de traitement est estimée en secondes. Minyar Sassi Hidri Technologies pour le Big Data 154 / 227
  • 156.
    Traitement des donnéesTraitement par streaming : Stream processing Traitement par Streaming Inconvénients I Pas de visibilité sur l’ensemble des données. - Certains types de traitements ne peuvent pas être réalisés. I Complexité opérationnelle élevée. - Plus complexes à maintenir que les traitements batch. - Le système doit être toujours connecté, toujours prêt, avoir des temps de réponses courts, et gérer les données à l’arrivée. I Risque de perte de données. I Cas d’utilisation : - Recommandations en temps réel : prise en compte de navigation récente, géo-localisation, publicité en ligne, re-marketing. - Surveillance de larges infrastructures. - Agrégation de données financières à l’échelle d’une banque. - Internet des objets ... Minyar Sassi Hidri Technologies pour le Big Data 155 / 227
  • 157.
    Lambda-architecture 1 Traitement desdonnées Traitement par lot : Batch processing Traitement par streaming : Stream processing 2 Comment réconcilier les Big Data avec le temps réel ? Lambda-architecture Big Data + Temps Réel : Pour quels use-cases ? Le système Big Data à construire Architecture Lambda 3 Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig Apache Hive Spark Minyar Sassi Hidri Technologies pour le Big Data 156 / 227
  • 158.
    Lambda-architecture Big Data+ Temps Réel : Pour quels use-cases ? Big Data + Temps Réel : Pour quels use-cases ? I Recommandation en temps réel : - Prise en compte de la navigation récente, géo-localisation. - Pour : re-marketing, publicité en ligne... I Surveillance de larges infrastructures : Data centers... I Agrégation de données financières à l’échelle d’une banque. I Internet des objets. I .... =⇒ Des flux de données à prendre en compte en temps réel. + =⇒ Des historiques très volumineux qui recèlent de la valeur. Minyar Sassi Hidri Technologies pour le Big Data 157 / 227
  • 159.
    Lambda-architecture Le systèmeBig Data à construire Le système Big Data à construire + Prend en charge toutes les données. - Qu’elles soient historiques ou datent de la dernière seconde. + Capable de répondre à n’importe quel type de requête. - Analytique, Data Mining, search... + Tolérant les pannes1. + Robuste aux évolutions, aux erreurs. + Scalable : - × 10 TB en stockage. - × 100 requêtes / seconde. + Basse latence en écriture ET en lecture. 1 La tolérance aux pannes (on dit également insensibilité aux pannes) désigne une méthode de conception permettant à un système de continuer à fonctionner, éventuellement de manière réduite (on dit aussi en mode dégradé), au lieu de tomber complètement en panne, lorsque l’un de ses composants ne fonctionne plus correctement. Minyar Sassi Hidri Technologies pour le Big Data 158 / 227
  • 160.
    Lambda-architecture Le systèmeBig Data à construire Le système Big Data à construire query=function(All Data) Minyar Sassi Hidri Technologies pour le Big Data 159 / 227
  • 161.
    Lambda-architecture Architecture Lambda ArchitectureLambda (MapR) Architecture Lambda : Une architecture basée sur des vues précalculées. ⇒ Séparation des problèmes : stockage, calcul et lecture. Minyar Sassi Hidri Technologies pour le Big Data 160 / 227
  • 162.
    Lambda-architecture Architecture Lambda ArchitectureLambda Couches I Batch Layer - Gérer l’unité de stockage principale : des données brutes, immuables et complètes. - Permet de pré-calculer et conserver les résultats de requêtes appelées batch views. I Serving Layer - Permet d’indexer les batch views pour qu’elles soient requêtées au besoin avec une faible latence. I Speed Layer - Permet d’accommoder toutes les requêtes sujettes à des besoins de faible latence. - Utilisation d’algorithmes rapides et incrémentaux. - Gère les données récentes uniquement. Minyar Sassi Hidri Technologies pour le Big Data 161 / 227
  • 163.
    Lambda-architecture Architecture Lambda ArchitectureLambda Couches I Lorsque des données entrent dans le système : 1 Les nouvelles données sont envoyées au batch layer et au speed layer. 2 Le batch détient les données maîtres qui sont immuables, en APPEND-only. 3 Le batch layer recalcule en permanence et en totalité les batch views, dédiées à des topologies de requêtes. 4 Ces batch views sont publiées et indexées sur le serving layer, dont l’implémentation est une BD scalable. 5 Le speed layer est un composant de stream processing qui compense pour les dernières heures de données non prises en charge par les batchs. 6 Il met à jour, de manière incrémentale, les realtime views. 7 Les résultats des requêtes sont la combinaison des résultats en provenance des realtime views et des batch views. Minyar Sassi Hidri Technologies pour le Big Data 162 / 227
  • 164.
    Lambda-architecture Architecture Lambda Batchlayer I Stockage maître (on reconstruit tout à partir de c¸a) + Traitements Batch. I Réceptionne les nouvelles données, les stockent (en APPEND-only). I Précalcule des vues dédiées à des classes de requêtes. I Besoins : - Stockage scalable - Haute distribution - Support de la charge et du volume - Tolérance aux pannes - Système de réplication et distribution des données. - Robustesse - Surtout concernant les évolutions du schéma. - Permettant tout type de traitement. I Technologies - Hadoop - Avro : Système de sérialisation des données - Hive - ... Minyar Sassi Hidri Technologies pour le Big Data 163 / 227
  • 165.
    Lambda-architecture Architecture Lambda SpeedLayer I Traite les mêmes données que celles envoyées dans le batch. I Mise à jour des vues, en continu, de manière incrémentale, dès l’arrivée d’une nouvelle donnée. I Faible latence de traitement : ∼10ms à quelques secondes. I Besoins - Traitement en continu (stream processing). - Tolérance aux pannes. - Garanties de traitement si possible. - Rejeu possible des messages en cas de perte d’un nœud. I Technologies - Kafka : collecte temps réel. - Akka : message-driven applications. - Storm : Stream processing. - Spark : Micro-batch processing. - ... Minyar Sassi Hidri Technologies pour le Big Data 164 / 227
  • 166.
    Lambda-architecture Architecture Lambda ServingLayer : Batch Views I Vues précalculées I Besoins - ´Ecritures massives - Lectures indexées, accès aléatoire à faible temps de réponse - Scalabilité et tolérance aux pannes I Technologies - Cassandra - Hbase - SploutSQL : requêtage SQL à faible latence - ... Minyar Sassi Hidri Technologies pour le Big Data 165 / 227
  • 167.
    Lambda-architecture Architecture Lambda ServingLayer : Realtime Views I Vues ne contiennent que quelques heures de données. I Vues supprimées dès que les batchs ont terminé. I Vues doivent être requêtées de fac¸on intensive et performante. I Temps de réponse court, fort débit de requête supporté. I Besoins - Support de fortes sollicitations en lecture et écriture (mise à jour incrémentale). - Scalabilité et tolérance aux pannes. I Technologies - Cassandra - Hbase - Redis - ElasticSearch Minyar Sassi Hidri Technologies pour le Big Data 166 / 227
  • 168.
    Lambda-architecture Architecture Lambda ServingLayer : Fusion I Logique de fusion développée selon les vues et leur modélisation I Peut s’avérer difficile. - Expiration des vues. - Recouvrement (intersection) possible entre les données batch et temps-réel. Minyar Sassi Hidri Technologies pour le Big Data 167 / 227
  • 169.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL 1 Traitement des données Traitement par lot : Batch processing Traitement par streaming : Stream processing 2 Comment réconcilier les Big Data avec le temps réel ? Lambda-architecture Big Data + Temps Réel : Pour quels use-cases ? Le système Big Data à construire Architecture Lambda 3 Requêtage des données Hadoop : Pig, Hive, Spark et SparkQL Apache Pig Apache Hive Spark Minyar Sassi Hidri Technologies pour le Big Data 168 / 227
  • 170.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Requêtage des données Hadoop I Hadoop est principalement utilisé pour le monde batch. I Le paradigme MapReduce sur Hadoop ne propose pas de transformation ou de requêtage performant mais plutôt un traitement d’une forte volumétrie de données. I Cependant, la performance n’est pas à négliger dans certains cas : - Lorsque la fenêtre de traitement des données devient serrée pour fournir des données à jour. - Des besoins de requêtages ponctuels par des analystes peuvent arriver au travers d’outils type Pig ou Hive. I Il devient nécessaire de fournir ces données dans un temps de requêtage supportable à l’échelle Humaine. Minyar Sassi Hidri Technologies pour le Big Data 169 / 227
  • 171.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Présentation I Pig est un autre outil associé à Hadoop. I But : permettre de développer facilement et rapidement des programmes MapReduce, sans avoir à développer en Java, Python ou R. I Sa syntaxe se rapproche du langage SQL et il est notamment utile pour les programmeurs peu familiers avec Java, Python ou R ou qui souhaitent simplement expérimenter avec la méthodologie MapReduce ou Hadoop en général rapidement. I Le langage de programmation de Pig est appelé Pig Latin. Minyar Sassi Hidri Technologies pour le Big Data 170 / 227
  • 172.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Utilisation I Pig fonctionne comme un interpréteur de scripts exactement comme Python. I Il suffit d’écrire un script Pig, de l’exécuter avec l’interpréteur (le programme en ligne de commande pig), et il exécutera le script dans l’environnement Hadoop. I Pour exécuter un script Pig Latin sur Hadoop, on utilisera la commande : pig -x mapreduce fichier.pig I Il est également possible de l’exécuter en mode local. Dans ce mode, Pig ignore complètement Hadoop et HDFS : il chargera ses fichiers depuis le disque local, et stockera ses résultats au même endroit. Pour ce faire, on utilise la commande : pig -x local fichier.pig I Lien d’installation : https ://www.tutorialspoint.com/apache pig/apache pig installation.htm Minyar Sassi Hidri Technologies pour le Big Data 171 / 227
  • 173.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Utilisation I Enfin - et toujours comme Python - il peut également s’utiliser en mode interactif, où on tape ses instructions Pig Latin dans une invite de commande. I Pour ce faire, il suffit de le lancer avec la commande : pig I Dans ce mode, il détectera automatiquement si oui ou non Hadoop est présent et se placera dans le mode d’exécution qui correspond (on peut également forcer le mode à utiliser, toujours avec l’option -x). I Par exemple : pig -x local ou encore : pig -x mapreduce Minyar Sassi Hidri Technologies pour le Big Data 172 / 227
  • 174.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Fonctionnement I Pig constitue une couche d’abstraction au dessus de Hadoop. I Un script écrit en Pig Latin est converti en une ou plusieurs tâches MapReduce exécutées sur Hadoop. I Tout programme Pig est constitué des étapes suivantes : - Chargement des données (LOAD). - Transformations/traitements sur les données. - Sauvegarde des résultats (DUMP/STORE). I Ces trois étapes sont toutes parallélisées par le biais de tâches MapReduce. Minyar Sassi Hidri Technologies pour le Big Data 173 / 227
  • 175.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Syntaxe I Chaque ligne d’un script Pig doit être terminée par un point-virgule ’ ;’. I Il est possible de commenter le code avec la syntaxe multi-lignes : /* Ceci est un commentaire sur plusieurs lignes. */ I ou avec la syntaxe sur une ligne : LOAD... −− Ceci est un commentaire sur une ligne. Minyar Sassi Hidri Technologies pour le Big Data 174 / 227
  • 176.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Types I Pig supporte les types de données usuels suivants : - int : un entier sur 32 bits. - long : un entier sur 64 bits. - float : un flottant sur 32 bits. - double : un flottant sur 64 bits. - chararray : une chaîne de caractères UTF-8. - bytearray : une chaîne binaire. - boolean : un booléen (true/false). I Pig supporte également les trois types complexes suivants : - tuple : une série de données. Par exemple : (12, John, 5.3) - bag : un ensemble de tuples. Par exemple : {(12, John, 5.3), (8), (3.5, TRUE, Bob, 42)} - map : une série de couples (clef ;valeur). Par exemple : [qui#22, le#3] (ici avec deux couples clef ;valeur). Au sein d’un type map, chaque clef doit être unique. Minyar Sassi Hidri Technologies pour le Big Data 175 / 227
  • 177.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Types I Un tuple peut tout à fait contenir d’autres tuples, ou encore des bags, ou autres types simples et complexes. I Par exemple : ({(1, 2), (3, John)}, 3, [qui#23]) - Un bag contenant lui-même deux tuples. - Un entier de valeur 3. - Un map contenant un seul couple (clef ;valeur). Minyar Sassi Hidri Technologies pour le Big Data 176 / 227
  • 178.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Chargement de données I Les données d’entrée d’un programme pig seront typiquement chargées au sein d’un bag. I Pour charger des données depuis le système de fichier (HDFS en mode MapReduce ou système de fichiers local en mode local), on utilise la commande LOAD. I Synopsis : LOAD ’source’ [USING fonction] [AS schemas] - où source est le nom du/des fichier(s) ou répertoire(s). - fonction le nom d’une fonction d’importation. - schemas un descriptif du format des données importées. I Le paramètre source peut être : - Un fichier unique, par exemple data.txt. - Un répertoire (chargera tous les fichiers du répertoire), par exemple Data Input. - Une expression complexe au même format que celles comprises par Hadoop/HDFS, par exemple : Data Input/input-1-*. Minyar Sassi Hidri Technologies pour le Big Data 177 / 227
  • 179.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Chargement de données I C’est le paramètre fonction qui permet d’indiquer la manière de charger/segmenter les données d’une manière cohérente. I Le paramètre désigne une classe Java en charge d’interpréter les données depuis le système de fichier et d’en sortir des types Pig cohérents (tuples / bag / map). I Pig offre une série de fonctions déjà disponibles pour simplifier la vie du programmeur. La plus couramment utilisée est la fonction PigStorage. I Syntaxe : PigStorage(”SEPARATEUR”) I PigStorage va charger les données textuelles d’entrée sous la forme d’un bag de tuples : un pour chaque ligne des données. I Le séparateur indique, pour chaque ligne, le caractère unique de séparation entre les différents champs des membre de chaque tuple. Minyar Sassi Hidri Technologies pour le Big Data 178 / 227
  • 180.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Chargement de données I Imaginons qu’on ait le fichier d’entrée etudiants.txt suivant : ADAM|Guillaume|15 BERCHANE|Rachid|18 BOULLAIRE|Alexandre|16 BOYER|Raphael|17 CHAMPOUSSIN|Luca|14 CODA|Stephen|15 I Si on exécute la ligne : A = LOAD ’etudiants.txt’ USING PigStorage(’|’) ; ...alors A contiendra le bag de tuples suivant : (ADAM,Guillaume,15) (BERCHANE,Rachid,18) (BOULLAIRE,Alexandre,16) (BOYER,Raphael,17) (CHAMPOUSSIN,Luca,14) (CODA,Stephen,15) (avec trois champs texte, texte et entier par tuple) I Si en revanche, on utilise : A = LOAD ’etudiants.txt’ USING PigStorage(’,’) ; alors A contiendra le bag de tuples suivant : (”ADAM|Guillaume|15”) (”BERCHANE|Rachid|18”) (”BOULLAIRE|Alexandre|16”) (”BOYER|Raphael|17”) (”CHAMPOUSSIN|Luca|14”) (”CODA|Stephen|15”) (avec un seul et unique champs texte par tuple) Minyar Sassi Hidri Technologies pour le Big Data 179 / 227
  • 181.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Chargement de données I La fonction de chargement PigStorage permet ainsi facilement de charger un fichier textuel avec des délimiteurs. I Comme indiqué précédemment, le paramètre fonction est optionnel. Si on n’indique pas de fonction, alors la fonction utilisée est PigStorage, avec un séparateur correspondant à une tabulation. I Ainsi, imaginons que notre fichier d’entrée etudiants.txt ait le format suivant : ADAM[TAB]Guillaume[TAB]15 BERCHANE[TAB]Rachid[TAB]18 BOULLAIRE[TAB]Alexandre[TAB]16 BOYER[TAB]Raphael[TAB]17 CHAMPOUSSIN[TAB]Luca[TAB]14 CODA[TAB]Stephen[TAB]15 I Si on exécute : A = LOAD ’etudiants.txt’ ; ...alors A contiendra le bag de tuples suivant : (ADAM,Guillaume,15) (BERCHANE,Rachid,18) (BOULLAIRE,Alexandre,16) (BOYER,Raphael,17) (CHAMPOUSSIN,Luca,14) (CODA,Stephen,15) (avec trois champs texte, texte et entier par tuple) Minyar Sassi Hidri Technologies pour le Big Data 180 / 227
  • 182.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Chargement de données I Il existe d’autres fonctions standards de chargement mises à disposition par Pig, parmi lesquelles : - TextLoader : aucun paramètre, charge simplement chaque ligne de texte comme un tuple avec un seul champs - la ligne elle-même. - JsonLoader : permet de charger un fichier JSON de manière structurée. - AvroLoader : permet de charger un fichier binaire AVRO. I Il est également possible de développer sa propre fonction de chargement (sous la forme d’une classe Java compilée en .jar). Minyar Sassi Hidri Technologies pour le Big Data 181 / 227
  • 183.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Chargement de données I Par défaut, une fois le bag des données d’entrée chargé, on pourra se référer à différents membres de chaque tuple en utilisant la syntaxe : $0, $1, $2, etc. ...pour référencer le premier, second, troisième, etc. membre de chaque tuple. I Par exemple, si on a chargé les données suivantes dans A : (ADAM,Guillaume,15) (BERCHANE,Rachid,18) (BOULLAIRE,Alexandre,16) ...alors l’expression A.$2 désignera la note (15, 18,...) ; de même, l’expression A.$0 désignera le nom de famille (ADAM,...). Minyar Sassi Hidri Technologies pour le Big Data 182 / 227
  • 184.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Chargement de données I Le troisième argument optionnel de LOAD, schemas, permet de : - Donner un nom aux champs des tuples chargés. - Leur attribuer un type de données explicite. - Spécifier un type de chargement différent (autre qu’un simple bag de tuples). I Syntaxe : (NOM1 :TYPE1, NOM2 :TYPE2,NOM3 :TYPE3...) Le type est optionnel. I Par exemple, avec les données d’entrée in.txt : ADAM|Guillaume|15 BERCHANE|Rachid|18 BOULLAIRE|Alexandre|16 BOYER|Raphael|17 CHAMPOUSSIN|Luca|14 CODA|Stephen|15 I si on fait : A = LOAD ’in.txt’ USING PigStorage(’|’) AS (nom, prenom, note) ; Alors on pourra se référer par exemple à la note plus loin par le biais de la syntaxe A.note. Minyar Sassi Hidri Technologies pour le Big Data 183 / 227
  • 185.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Chargement de données On pourrait également forcer le type de la note par le biais de : A = LOAD ’in.txt’ USING PigStorage(’|’) AS (nom, prenom, note :float) ; ...et si on exécute par exemple : A = LOAD ’in.txt’ USING PigStorage(’|’) AS (nom, prenom :int, note :float) ; ...alors le champs prenom de notre fichier d’entrée ne sera pas chargé (valeur vide), puisque Pig tente de l’interpréter comme un type int et qu’il s’agit d’une chaîne de caractères dans les données d’entrée. Minyar Sassi Hidri Technologies pour le Big Data 184 / 227
  • 186.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Chargement de données I Un exemple plus complexe. Données d’entrée in.txt : (ADAM,Guillaume)|(15,15,12) (BERCHANE,Rachid)|(18,15,20) (BOULLAIRE,Alexandre)|(16,11,18) I Si on fait : A = LOAD ’in.txt’ Using PigStorage(’|’) AS (infos :tuple(nom,prenom),notes :tuple(n1,n2,n3)) ; Alors les données obtenues auront la forme : ((ADAM,Guillaume),(15,15,12)) ((BERCHANE,Rachid),(18,15,20)) ((BOULLAIRE,Alexandre),(16,11,18)) Minyar Sassi Hidri Technologies pour le Big Data 185 / 227
  • 187.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Chargement de données I Dans l’exemple précédent, en délimitant au sein du fichier source les données sous la forme de deux champs tuples, on a pu indiquer à PigStorage lors du chargement qu’on souhaitait qu’ils soient chargés sous cette forme. I On pourra alors se référer par exemple à A.infos.prenom, ou encore A.notes.n1, etc. I Il faut évidemment que la fonction de chargement supporte ce type de schémas plus complexes. I Il est recommander de toujours explicitement définir un schéma de chargement avec tous les types et noms définis ; ceci d’une part pour la lisibilité, d’autre part pour assurer la cohérence dans le type des données d’entrée. Minyar Sassi Hidri Technologies pour le Big Data 186 / 227
  • 188.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Commande DESCRIBE I On peut à tout moment obtenir (au sein du shell interactif) une description de la composition d’un container par le biais de la commande DESCRIBE. I Exemple : A = LOAD ’in.txt’ Using PigStorage(’|’) AS (infos :tuple(nom,prenom),notes :tuple(n1,n2,n3)) ; DESCRIBE A ; Donnera à l’écran : A : infos : (nom : bytearray,prenom : bytearray),notes : (n1 : bytearray,n2 : bytearray,n3 : bytearray) ...c’est notamment utile lors de la rédaction/test d’un programme Pig. Minyar Sassi Hidri Technologies pour le Big Data 187 / 227
  • 189.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Sauvegarde de données : DUMP I Deux commandes principales existent pour extraire des données depuis Pig. I La première est la commande DUMP. I Syntaxe : DUMP <nom du container> ; I Exemple : DUMP A ; I Elle ne sauvegarde pas les données sur le système de fichier mais se contente de les afficher à l’écran. I Elle est utile lors de l’utilisation de Pig en mode interactif. Note : Les sorties affichées plus haut (résultats de LOAD) au sein de cette partie sont directement issues de la commande DUMP. Minyar Sassi Hidri Technologies pour le Big Data 188 / 227
  • 190.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Sauvegarde de données : STORE I La seconde est la commande STORE, qui sauve véritablement des données au sein du système de fichier (HDFS ou local selon le mode). I Syntaxe : STORE alias INTO ’repertoire’ [USING fonction] ; alias représente le container à sauvegarder (par exemple A). I Comme les données sont issues d’une tâche MapReduce, elles seront stockées sous la forme de plusieurs fichiers part-r-*. I En conséquence, repertoire indique le répertoire dans lequel on souhaite que la série de fichiers résultants de la tâche/du stockage soient écrits. Minyar Sassi Hidri Technologies pour le Big Data 189 / 227
  • 191.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Sauvegarde de données : STORE I Là aussi, on peut spécifier une fonction indiquant la manière de formater les données. Les mêmes fonctions que celles vu précédemment sont utilisables (PigStorage, JsonStorage, AvroStorage - mais pas par exemple TextLoader). I fonction est ici aussi optionnel ; la aussi, si on ne precise pas de fonction, c’est PigStorage(’t’) qui est utilisée. I STORE ne supporte pas de schéma ; à la place, si un schéma est nécessaire (par exemple pour du Json), c’est généralement le paramètre de la fonction de stockage qui est utilisé. I Dans le cas du JSON, par défaut, Pig utilisera les noms de colonnes directement issues du schéma de l’alias concerné ; il stocke par ailleurs le schéma sous la forme d’un fichier .pig schema dans le répertoire. Si on recharge les données avec un JsonStorage, le schéma sera automatiquement importé par la fonction. Minyar Sassi Hidri Technologies pour le Big Data 190 / 227
  • 192.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Exemples I Fichier d’entrée in.txt : ADAM|Guillaume|15 BERCHANE|Rachid|18 BOULLAIRE|Alexandre|16 BOYER|Raphael|17 I Chargé dans l’alias A avec : A = LOAD ’in.txt’ USING PigStorage(’|’) AS (nom :chararray, prenom :chararray, note :float) ; I Sortie de DUMP A ; (ADAM,Guillaume,15) (BERCHANE,Rachid,18) (BOULLAIRE,Alexandre,16) (BOYER,Raphael,17) I Sortie de DESCRIBE A ; A : nom :chararray,prenom :chararray,note :float I Si on utilise : STORE A INTO ’results’ USING PigStorage(’,’) ; Un répertoire results/ sera créé, contenant ici un fichier unique part-r-00000 avec pour contenu : ADAM,Guillaume,15 BERCHANE,Rachid,18 BOULLAIRE,Alexandre,16 BOYER,Raphael,17 I Si les données avaient été plus conséquentes, on aurait pu avoir de nombreux fichiers part-r-00000, part-r-00001, etc. Minyar Sassi Hidri Technologies pour le Big Data 191 / 227
  • 193.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Exemples I Si on utilise : STORE A INTO ’results’ USING JsonStorage() ; Un répertoire results/ sera crée, contenant ici un fichier unique part-r-00000 avec pour contenu : {”nom” :”ADAM”,”prenom” :”Guillaume”,”note” :15.0} {”nom” :”BERCHANE”,”prenom” :”Rachid”,”note” :18.0} {”nom” :”BOULLAIRE”,”prenom” :”Alexandre”,”note” :16.0} {”nom” :”BOYER”,”prenom” :”Raphael”,”note” :17.0} I Par ailleurs, Pig a également crée un fichier .pig schema ; si on recharge plus tard les données avec JsonLoader (le pendant chargement de JsonStorage), le schéma sera automatiquement déduit. Minyar Sassi Hidri Technologies pour le Big Data 192 / 227
  • 194.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Autres commandes I Le shell interactif de Pig offre quelques commandes pratiques pour le développeur. I L’une de ces commandes est cat : comme la commande cat Unix, elle affiche le contenu d’un fichier. I En revanche, dans le cadre de Pig, elle est étendue au fonctionnement Hadoop ; si on fait cat [REPERTOIRE] la commande affichera automatiquement le contenu concaténé de tous les fichiers du répertoire. I Autres commandes uniquement disponibles en mode interactif : - help : affiche une aide. - sh [COMMANDE] : exécute une commande shell. - exec [FICHIER.PIG] : exécute le script pig indique. - history : affiche un historique de toutes les commandes utilisées. - ls, mkdir, rm, etc. : équivalentes à Unix. - ... Minyar Sassi Hidri Technologies pour le Big Data 193 / 227
  • 195.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Traitement de données I On a vu jusqu’ici comment charger des données depuis le système de fichiers local/HDFS au sein d’un alias Pig, et comment sauvegarder un alias au sein du système de fichier ou simplement l’afficher à l’écran en mode interactif (DUMP). I On va maintenant voir comment manipuler les données, c’est à dire effectuer un traitement sur nos données d’entrée. I Toutes les fonctions et opérateurs de Pig ne sont pas décrites ici ; seule une sélection large mais non exhaustive est décrite ; se référer à la documentation de Pig pour plus d’informations. Minyar Sassi Hidri Technologies pour le Big Data 194 / 227
  • 196.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig L’opérateur FILTER I L’opérateur FILTER permet de filtrer les éléments d’un alias selon une ou plusieurs conditions. I Syntaxe : DEST = FILTER SOURCE BY EXPRESSION ; I Il s’agit d’un équivalent au WHERE de SQL. I On pourra ainsi faire par exemple : B = FILTER A BY note > 10 ; Ou encore : B = FILTER A BY note > 10 AND ((annee naissance+age)<2014) ; Minyar Sassi Hidri Technologies pour le Big Data 195 / 227
  • 197.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig L’opérateur ORDER I L’opérateur ORDER permet de trier les éléments selon une condition. C’est l’équivalent du ORDER BY de SQL. I Syntaxe : DEST = ORDER SOURCE BY FIELD [ASC|DESC] ; I On pourra ainsi faire par exemple : B = ORDER A BY note DESC ; Ou encore : B = ORDER A BY note DESC, nom ASC ; Minyar Sassi Hidri Technologies pour le Big Data 196 / 227
  • 198.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig L’opérateur GROUP I L’opérateur GROUP permet de grouper les tuples selon un champs. I Il génère des tuples constitues de deux champs : - Le premier, nommé group, est un champs simple, contenant la valeur unique du champs utilisé lors de l’appel à GROUP. - Le second, qui porte le nom de l’alias sur lequel a été appliqué GROUP, est un bag qui contient une série de tuples : tous ceux pour lesquels la valeur en question a été rencontrée. I Syntaxe : DEST = GROUP SOURCE BY FIELD ; I Si on a : ADAM,Guillaume,15 BERCHANE,Rachid,15 BOULLAIRE,Alexandre,16 DUMP A donne : (ADAM,Guillaume,15) (BERCHANE,Rachid,15) (BOULLAIRE,Alexandre,16) I On exécute : B = GROUP A BY note ; I On obtient : DUMP B ; (15,{(BERCHANE,Rachid,15),(ADAM,Guillaume,15)}) (16,{(BOULLAIRE,Alexandre,16)}) DESCRIBE B ; B : {group :float,A :{(nom :chararray,prenom :chararray,note :float)}} Minyar Sassi Hidri Technologies pour le Big Data 197 / 227
  • 199.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Opérateur FOREACH...GENERATE I L’opérateur FOREACH...GENERATE permet d’itérer chacun des tuples du bag de l’alias concerné, et de générer d’autres tuples pour chacun d’entre eux. I Syntaxe : DEST = FOREACH SOURCE GENERATE EXPRESSION ; I Au sein de l’expression, on peut générer des bags, des tuples, des maps, etc. et appeler des fonctions à la volée. I On peut également nommer des champs générés de cette manière au sein de l’appel à GENERATE. I Si on a : ADAM,Guillaume,15 BERCHANE,Rachid,15 BOULLAIRE,Alexandre,16 DUMP A donne : (ADAM,Guillaume,15) (BERCHANE,Rachid,15) (BOULLAIRE,Alexandre,16) I On exécute : B = FOREACH A GENERATE note ; I Et on obtient : DUMP B ; (15) (15) (16) DESCRIBE B. B : {note :float} Minyar Sassi Hidri Technologies pour le Big Data 198 / 227
  • 200.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Opérateur FOREACH...GENERATE I On exécute : B = FOREACH A GENERATE (nom,prenom) AS infos, note ; I On obtient : DUMP B ; ((ADAM,Guillaume),15.0) ((BERCHANE,Rachid),15.0) ((BOULLAIRE,Alexandre),16.0) DESCRIBE B. B : {infos :(nom :chararray,prenom :chararray),note :float} Minyar Sassi Hidri Technologies pour le Big Data 199 / 227
  • 201.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Opérateur FOREACH...GENERATE I Il est également possible d’imbriquer des traitement plus complexe au sein de cet opérateur, par exemple pour effectuer des traitements sur les tuples d’un bag. I Syntaxe : DEST = FOREACH SOURCE { OPERATION 1 ; OPERATION 2 ; ... } ; I Imaginons par exemple qu’on ait des données sous la forme : A : {infos : (nom : bytearray,prenom : bytearray), notes : (n1 : bytearray,n2 : bytearray,n3 : bytearray)} ...on pourrait alors faire : B = FOREACH A { C = (notes.n1+notes.n2+notes.n3)/3.0 ; GENERATE infos,C as moyenne ; } ; Pour générer la moyenne des notes tout en conservant les noms & prénoms des élèves contenus dans l’alias A. Minyar Sassi Hidri Technologies pour le Big Data 200 / 227
  • 202.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig L’opérateur FLATTEN I L’opérateur FLATTEN permet de déplier un ensemble de tuples et bags pour les transformer en de simples tuples. I Par exemple, si on a une liste de tuples dans un alias B au format suivant : (15,{(BERCHANE,Rachid,15),(ADAM,Guillaume,15)}) (16,{(BOULLAIRE,Alexandre,16)}) B :{group :float,A :{(nom :chararray,prenom :chararray,note :float)}} I Et qu’on exécute : C = FOREACH B GENERATE FLATTEN(A) ; I On obtiendra : (BERCHANE,Rachid,15.0) (ADAM,Guillaume,15.0) (BOULLAIRE,Alexandre,16.0) Minyar Sassi Hidri Technologies pour le Big Data 201 / 227
  • 203.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Autres opérateurs I LIMIT : récupérer les N premiers tuples d’un alias. I SPLIT : générer plusieurs alias à partir d’un alias ; selon des expressions conditionnelles. I CROSS : mélanger les tuples de deux alias. I DISTINCT : éliminer les tuples identiques au sein d’un alias. I SAMPLE : obtenir une sous-sélection aléatoire de tuples depuis un alias (par exemple, récupérer 10% des tuples d’un alias de manière aléatoire). I ...et d’autres (se référer à la documentation officielle de Pig pour plus d’informations). Minyar Sassi Hidri Technologies pour le Big Data 202 / 227
  • 204.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Fonctions - Chaînes de caractères I Pig propose, en standard, de nombreuses fonctions pour la manipulation des types chaîne de caractères. I Quelques exemples : - TOKENIZE : découpe les différents mots d’une ligne. Génère un bag contenant un tuple pour chacun des mots. Par exemple, A : (”exemple de phrase”) (”autre exemple”) B = FOREACH A GENERATE TOKENIZE($0) ; DUMP B : ({(”exemple”), (”de”), (”phrase”)}) ({(”autre”),(”exemple”)}) Minyar Sassi Hidri Technologies pour le Big Data 203 / 227
  • 205.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Fonctions - Chaînes de caractères I Autres exemples : - SIZE : renvoie la taille d’une chaîne de caractères. - SUBSTRING : permet de récupérer une sous-chaîne de caractères. - STRSPLIT : permet de découper une chaîne de caractères a partir d’une expression régulière. - LOWER : converti une chaîne en minuscules. - REPLACE : remplacement dans une chaîne (supporte la aussi les regexp). - et d’autres (la aussi, consulter la documentation). Minyar Sassi Hidri Technologies pour le Big Data 204 / 227
  • 206.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Fonctions - Mathématiques I De même, Pig propose un certain nombre de fonctions pour la manipulation des nombres. I Quelques exemples : - ABS : renvoie la valeur absolue d’un nombre. - COS/SIN/TAN : cosinus/sinus/tangente. - RANDOM : génère un flottant aléatoire entre 0 et 1. - ROUND : génère l’arrondi d’un nombre. - et d’autres (même remarque). Minyar Sassi Hidri Technologies pour le Big Data 205 / 227
  • 207.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Fonctions - Autres I Pig propose enfin quelques autres fonctions utiles : - COUNT(bag) : renvoie le nombre de tuples contenus au sein d’un bag. - CONCAT(f1,f2,f3,c) : concatène une série de champs d’un tuple. Supporte la concatenation des nombres (leur representation textuelle). - SUBSTRACT(b1,b2) : renvoie un bag constitué des éléments présents dans le bag b1 mais absents du bag b2. - SUM(bag) : renvoie la somme des éléments numériques contenus au sein d’un bag. - et d’autres (même remarque). Minyar Sassi Hidri Technologies pour le Big Data 206 / 227
  • 208.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Exemple - Compteur de mots, version Pig I On reprend l’exemple du compteur d’occurrences de mots. I Les données d’entrée, au sein d’un fichier WordCount.txt : Celui qui rêvait du travail Celui qui ny rêvait pas Tous deux adoraient la belle Pays des tunisiens I On commence par charger les données : A = LOAD ’WordCount.txt’ USING TextLoader AS ligne :chararray ; I Après chargement : DUMP A : (Celui qui rêvait du travail) (Celui qui ny rêvait pas) (Tous deux adoraient la belle) (Pays des tunisiens) DESCRIBE A : A : {ligne :chararray} Minyar Sassi Hidri Technologies pour le Big Data 207 / 227
  • 209.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Exemple - Compteur de mots, version Pig I On exécute ensuite : B = FOREACH A GENERATE TOKENIZE(LOWER(ligne)) AS mots ; ...ce qui aura pour effet, pour chaque ligne, de la convertir en minuscules, puis de générer un bag de tuples : un pour chacun des mots de la ligne en minuscules (fonction TOKENIZE). I On donne également un nom au bag en question : mots. I Après exécution : DUMP B : ({(celui),(qui),(rêvait),(du),(travail)}) ({(celui),(qui),(ny),(rêvait),(pas)}) ({(tous),(deux),(adoraient),(la),(belle)}) ({(pays),(des),(tunisiens)}) DESCRIBE B : B :{mots :{tuple of tokens : (token :chararray)}} Minyar Sassi Hidri Technologies pour le Big Data 208 / 227
  • 210.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Exemple - Compteur de mots, version Pig I On exécute ensuite : C = FOREACH B GENERATE FLATTEN(mots) AS mot ; ...ce qui aura pour effet, pour chaque tuple, de déplier le bag contenant chacun des mots et de générer pour chacun des tuples contenu dans ce bag un tuple indépendant. I On donne également un nom à ces tuples désormais indépendants : mot. I Après exécution : DUMP C : (celui) (qui) (rêvait) (du) (travail) (celui) (qui) (ny) (rêvait) (pas) (tous) ... DESCRIBE C : C :{mot :chararray} Minyar Sassi Hidri Technologies pour le Big Data 209 / 227
  • 211.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Exemple - Compteur de mots, version Pig I On exécute ensuite : D = GROUP C BY mot ; ...ce qui aura pour effet de regrouper les tuples par mot commun. I On rappelle que l’opérateur GROUP va générer un tuple constitue d’un premier membre group qui contient le mot unique en question, et d’un second membre C de type bag qui contient tous les tuples correspondant à cette valeur. I Après exécution : DUMP D : (au,{(au)}) (la,{(la)}) (ny,{(ny)}) (qui,{(qui),(qui)}) (tous,{(tous)}) (belle,{(belle)}) (celui,{(celui),(celui)}) (rêvait,{(rêvait),(rêvait)}) ... DESCRIBE D : D :{group :chararray,C :{(mot :chararray)}} Minyar Sassi Hidri Technologies pour le Big Data 210 / 227
  • 212.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Exemple - Compteur de mots, version Pig I On exécute enfin : E = FOREACH D GENERATE group AS mot, COUNT(C) as occurrences ; ...ce qui aura pour effet de parcourir l’alias D et, pour chaque tuple, de récupérer le premier membre group et le nombre de tuples du second membre de type bag C. I On génère un nouveau tuple à partir de ces deux informations : on donne au premier champs le nom Ąmot, et au second le nom occurences. I Après exécution : DUMP E : (au,1) (la,1) (qui,2) (belle,1) (celui,2) (rêvait,2) (tunisiens,1) (pays,1) ... DESCRIBE E : E :{mot :chararray,occurrences :long} Minyar Sassi Hidri Technologies pour le Big Data 211 / 227
  • 213.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Exemple - Compteur de mots, version Pig I Il reste enfin à sauvegarder les données : STORE E INTO ’/results’ I Puisqu’on ne precise pas de fonction de stockage, Pig utilisera par défaut PigStorage(’’) : il devrait écrire chacun des tuple sur une ligne textuelle, en séparant chacun des champs par une tabulation. I La méthode générera un repertoire /results (sur HDFS ou le système de fichiers local), qui contiendra une série de fichier part-r-XXXXX, contenant les différents tuples de E. I Contenu du fichier /results/part-r-00000 : du 1 la 1 ny 1 des 1 pas 1 qui 2 travail 1 deux 1 tous 1 belle 1 celui 2 rêvait 2 tunisiens 1 adoraient 1 pays 1 Minyar Sassi Hidri Technologies pour le Big Data 212 / 227
  • 214.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig ´Etendre Pig I On l’a vu, Pig propose de nombreuses fonctions en standard. I En revanche, dans beaucoup de cas complexes, on a besoin d’effectuer des traitements qui sont impossible avec les seules fonctions standard de Pig. I Pour pallier à ce manque, Pig implémente le concept de User Defined Functions. Il s’agit d’un mécanisme permettant d’étendre Pig. I Le fonctionnement est simple : il suffit de développer la fonction dont on a besoin en Java (en implémentant certaines interfaces Pig), et une fois compilées, elles deviennent disponibles au sein de tout programme Pig chargeant le .jar correspondant. I Il est également possible de développer ces fonctions en Python / autres langages (par un mécanisme similaire à Streaming pour Hadoop). Minyar Sassi Hidri Technologies pour le Big Data 213 / 227
  • 215.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig User Defined Functions I Pour charger un .jar additionnel depuis un programme Pig, on utilise la commande REGISTER. I Par exemple : REGISTER udf.jar ;(sans guillemets autour du nom du .jar) I On peut ensuite simplement invoquer la fonction à partir de son classpath directement depuis le langage Pig Latin. Par exemple : B = FOREACH A GENERATE org.mbds.udf.UpperCase(nom) ; (en supposant qu’une classe org.mbds.udf.UpperCase existe au sein du fichier udf.jar d’exemple) Minyar Sassi Hidri Technologies pour le Big Data 214 / 227
  • 216.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig User Defined Functions - Exemple I Exemple : on ne peut pas sans fonction additionnelle implémenter un programme Pig pour résoudre le problème des anagrammes. En effet, il n’y a pas de moyen depuis les fonctions standard Pig de générer la clef (les lettres du mot, classées par ordre alphabétique). I En conséquence, on imagine qu’on va rédiger une fonction Pig additionnelle pour implémenter cette opération : elle prendra en entrée une chaîne de caractères, et fournira en sortie la même chaîne avec les lettres ordonnées alphabétiquement. I On décide d’appeler cette classe SortLetters au sein d’un package : org.mbds.hadoop.pigudfs Minyar Sassi Hidri Technologies pour le Big Data 215 / 227
  • 217.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig User Defined Functions - Exemple Minyar Sassi Hidri Technologies pour le Big Data 216 / 227
  • 218.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig User Defined Functions - Exemple I Une fois ce code compilé dans un .jar, par exemple un fichier mbds udfs.jar, on pourra faire au sein de tout programme Pig : REGISTER mbds udfs.jar ; I Et si on utilise : org.mbds.hadoop.pigudfs.SortLetter(field) ...alors on recevra en valeur de retour la valeur de la chaîne field, avec les lettres triées alphabétiquement. Minyar Sassi Hidri Technologies pour le Big Data 217 / 227
  • 219.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Pig Conclusion I On a vu que Pig constituait un outil puissant et accessible pour la rédaction et l’exécution de programmes MapReduce via Hadoop. I Il est par ailleurs infiniment extensible via le mécanisme des User Defined Functions. I Si beaucoup d’opérateurs et de fonctions standards de Pig ont été abordes, il y en a beaucoup d’autres : pour approfondir le sujet, se référer à la documentation officielle de Pig (+ guide de lectures additionnelles du cours). Minyar Sassi Hidri Technologies pour le Big Data 218 / 227
  • 220.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Hive D’où vient Hive ? I D’où vient Hive ? - Chez Facebook manipulation d’une quantité monstre des données chaque jour. - Avoir des alternatives à : - MapReduce - Pig - Rentabiliser les ingénieurs qui connaissent et maîtrisent SQL ! I C’est quoi Hive ? - Une infrastructure pour Entrepôt de Données. ⇒ on peut tout simplement le considérer comme un Data Warehouse. I Comment c¸a marche ? - Hive a pour fondation Hadoop. - Hive stocke ses données dans HDFS. - Hive compile des requêtes SQL en jobs. MapReduce et les exécute sur le cluster. Hadoop. Minyar Sassi Hidri Technologies pour le Big Data 219 / 227
  • 221.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Hive Java versus Hive : Calcul du nombres des occurrences de mots Minyar Sassi Hidri Technologies pour le Big Data 220 / 227
  • 222.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Hive Java versus Hive : Calcul du nombres des occurrences de mots Minyar Sassi Hidri Technologies pour le Big Data 221 / 227
  • 223.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Hive D’où vient Hive ? I D’où vient Hive ? - Chez Facebook manipulation d’une quantité monstre des données chaque jour. - Avoir des alternatives à : - MapReduce - Pig - Rentabiliser les ingénieurs qui connaissent et maîtrisent SQL ! I C’est quoi Hive ? - Une infrastructure pour Entrepôt de Données. ⇒ on peut tout simplement le considérer comme un Data Warehouse. I Comment c¸a marche ? - Hive a pour fondation Hadoop. - Hive structure les données tables, colonnes, lignes. - Hive stocke les données dans HDFS. - Hive compile les requêtes SQL en Job Map/Reduce. - Hive propose un langage de requêtes SQL HiveQL LDD et LMD. Minyar Sassi Hidri Technologies pour le Big Data 222 / 227
  • 224.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Apache Hive Hive : Comment ça marche Minyar Sassi Hidri Technologies pour le Big Data 223 / 227
  • 225.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Spark Hadoop : Qu’est que Spark ? I Apache Spark is a powerful open source processing engine for Hadoop data built around speed, ease of use, and sophisticated analytics. It was originally developed in 2009 in UC Berkeley’s AMPLab, and open sourced in 2010. I Ce n’est pas une version modifiée de Hadoop. I C’est un moteur MapReduce plus évolué, plus rapide. - Utilisation de la mémoire pour optimiser les traitements. - Des API’s pour faciliter et optimiser les étapes d’analyses. - Permettre le traitement temps réel des données. I Compatible avec le système de stockage de Hadoop (HDFS, Hive, SequenceFiles...) Minyar Sassi Hidri Technologies pour le Big Data 224 / 227
  • 226.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Spark Hadoop : Spark, plus rapide I RDD’s (Resilient Distributed DataSet) - Une collection d’objets distribués, mise en cache en mémoire au travers du cluster. - Une API pour manipuler ces objets Operators. - Système de fail over automatique. Minyar Sassi Hidri Technologies pour le Big Data 225 / 227
  • 227.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Spark Hadoop : Spark, facile à utiliser. I Une liste d’Operators pour faciliter la manipulation des données au travers des RDD’S. - Map, filter, groupBy, sort, join, leftOuterJoin, ritghtOuterJoin, reduce, count, reduceByKey, groupByKey, first, union, cross, sample, cogroup, take, partionBy, pipe, save... I Compatible avec les langages de programmation fonctionnel Scala, Python, R et Java. Minyar Sassi Hidri Technologies pour le Big Data 226 / 227
  • 228.
    Requêtage des donnéesHadoop : Pig, Hive, Spark et SparkQL Spark Hadoop : Spark, un framework analytique Shark : Moteur de requête SQL, basé sur le coeur de Spark (in memory), il permet d’exécuter des requêtes hive sans modification 100x plus rapidement. MLLib : Library d’algorithmes d’analyses de données (data mining), scalable et optimisé (limite des interactions, RDD’s), k-means, ALS, L2− > L1... Spark Streaming : `A opposer aux traitements batch, mise à jour dŠun état dynamiquement, piloté par des évènements sur les données event processing (Filtre de Spam, analyse de click, reporting temps réel...) Minyar Sassi Hidri Technologies pour le Big Data 227 / 227