Un billet qui propose même une version musicale : http://www.youtube.com/watch?v=LUm19zKdASY
Bon ok , je sors…
Vous me direz, j’aurais pu faire pire et vous proposer une nouvelle version de « Oh chéri, chéri » de Karen Cheryl 😀 (désolé Fred… 😉 )
Pour être franc avec vous, j’ai longuement hésité avant de me lancer dans l’écriture de ce billet.
Le sujet est tellement vaste et les possibilités d’utilisation si nombreuses qu’il m’aurait fallu des pages et des pages pour en faire le tour (en plus je suis certain d’avoir un retour amusé de certaines personnes de mon entourage sur ce billet :-D)
Mais après tout, pourquoi pas ? Donc je vais l’aborder sans plonger dans les détails mais suffisamment, je pense, pour pouvoir vous amuser (c’est bien le but, non ? 😀 )
Hadoop, quoi que c’est ?
Pour citer Wikipédia :
« Hadoop est un framework java libre destiné aux applications distribués et à la gestion intensive des données. Il permet aux applications de travailler avec des milliers de nœuds et des pétaoctets de données. Hadoop a été inspiré par les publications MapReduce, GoogleFS et BigTable de Google. »
Parmi les éléments composant Hadoop, nous allons retrouver principalement:
– HDFS (Hadoop Distributed File System), le système de fichiers distribués
– MAPREDUCE , un framework pour les calculs parallèles et distribués
– HBASE , la base de données distribuées
– ZOOKEEPER , un service de centralisation pour coordonner les systèmes distribués
– PIG , plateforme pour l’analyse d’un grand nombre de données
Vous l’avez compris, Hadoop sert principalement au traitement de gros volumes de données.
A cet effet, je vous invite à regarder la vidéo d’Olivier Grisel lors de sa présentation d’Hadoop et MapReduce a l’Open Source Developers Conference 2009 (vous retrouverez cette présentation ICI ).
Vous me direz « Oui mais bon, en quoi ça me concerne moi ??? ».
Tsss, petit scarabée, il n’y a pas si longtemps, dans une galaxie lointaine, vous stockiez l’intégralité de vos photos de vacances de votre vie sur un disque de 10 Go….
Aujourd’hui où le moindre APN bas de gamme prend une photo de 5 Mo, je vous laisse imaginer la volumétrie nécessaire pour stocker l’intégralité de vos clichés de vacances avec Tata Simone et surtout la cousine Juliette…
Bref, vous l’avez compris, la capacité des disques augmentent mais les vitesses de transfert, elles ne suivent pas.
En 1990, sur un disque de 1,4Go, avec un taux de transfert de 4,4 Mo/s, il vous fallait environ 5 minutes pour le lire entièrement. De nos jours, pour un disque d’1To, avec un taux de transfert de 100 Mo/sec, il vous faut presque 2h30 pour la même opération…
Diviser ces données sur 100 disques et, par cette lecture parallèle, toutes les données peuvent être lues en moins de 2 minutes.
Ceux qui utilisent le système RAID doivent comprendre 😉
Pour de plus amples détails, je vous invite a parcourir le Wiki Hadoop ou vous plonger dans l’excellent « Hadoop, The definitive Guide » chez O’Reilly .
Pour bien comprendre le fonctionnement d’Hadoop, comme toujours, un joli dessin pour tenter de conceptualiser le bouzin.
Il faut discerner tout d’abord la partie HDFS qui est le système de fichier distribué d’Hadoop, composé d’un serveur maître, le NameNode et de serveurs détenant les données proprement dites, les Datanodes.
Quand une application cliente a besoin d’accéder a une information, elle interroge le NameNode qui lui indique les Datanodes sur lesquels se trouve ces informations. Une fois en possession de cette liste, l’application cliente va directement interroger le(s) Datanodes.
Dans une architecture HDFS, un fichier est découpé en un ou plusieurs blocs et réparti sur les datanodes du cluster. De plus, chaque bloc est répliqué suivant le facteur de réplication que vous avez spécifié dans votre configuration.
Je ne vais pas vous expliquer en détails la façon dont est architecturé HDFS, je vous invite à lire cette page pour bien comprendre la structure :
http://hadoop.apache.org/common/docs/current/hdfs_design.html
Ensuite, par dessus HDFS, nous avons la partie moteur MAP/REDUCE avec un JobTracker, genre de centralisateur de tâches, et des TaskTracker qui se chargent d’executer les travaux demandés.
Le Client soumet la requète de travail au JobTracker qui va les transmettre au(x) TaskTracker concerné(s) en s’efforcant d’être au plus proche de la donnée.
Concernant MapReduce, son rôle consiste à diviser le traitement en 2 étapes :
- la première phase (Map) est une étape d’ingestion et de transformation des données sous la forme de paires clé/valeur
- la seconde phase (Reduce) est une étape de fusion des enregistrements par clé pour former le résultat final
Source : InternetCollaboratif
, sinon je vous invite à vous rendre sur cette page de Wikipédia qui vous donnera un peu plus d’explication sur son fonctionnement (inutile que je vous raconte la même chose 🙂 )
Sachez enfin qu’Hadoop est utilisé chez Yahoo!, Facebook, le New York Times, Last.fm etc… Bref, déjà bien éprouvé en production…
Bien, trêve de bavardage, attaquons nous a tout cela.
La société Cloudera propose sur son site une installation automatisée d’Hadoop, permettant de monter son cluster Hadoop en trois clics et configurable à souhait.
Excellente initiative qui mérite d’être saluée.
Mais bon, nous, on n’a pas peur, on est même plutôt « couillu » donc on va se la faire en mode installation a la mimine.
Pré-requis :
– Un JAVA 1.6 sur les serveurs : http://java.sun.com/javase/downloads/index.jsp
– Un utilisateur « hadoop » par exemple
– une paire de clés ssh privé/publique pour cet utilisateur afin de contrôler les noeuds du cluster
Téléchargez les sources sur : http://hadoop.apache.org/core/releases.html
tar xzvf hadoop-0.20.1.tar.gz
chown -R hadoop:hadoop hadoop-0.20.1
su - hadoop
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
ssh localhost (et sur les autres noeuds également) |
tar xzvf hadoop-0.20.1.tar.gz
chown -R hadoop:hadoop hadoop-0.20.1
su - hadoop
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
ssh localhost (et sur les autres noeuds également)
Il existe 3 modes d’installation d’Hadoop :
- Mode StandAlone (local)
- Mode Pseudo-Distributed(chaque démon Hadoop est lancé dans un process Java indépendant)
- Mode Fully-Distributed (Cluster)
Bien évidemment, nous, même pas peur, on va se faire l’installation « Cluster ».
Pour ce billet, je vais partir sur un cluster de 4 machines comme décris dans le schéma plus haut.
Pour faciliter les tests, le NameNode sera également DataNode.
Un petit dessin reprenant le nom des machines et leurs rôles pour la suite :
Les fichiers de configurations se trouve dans.. conf.
Voici les principaux :
hadoop-env.sh Variables d’environment utilisées par Hadoop
core-site.xml Configuration principal (comme les paramètres I/O pour HDFS et MapReduce
hdfs-site.xml Configuration des démons HDFS
mapred-site.xml Configuration pour le démon MapReduce (jobtracker et les tasktrackers)
masters Liste des machines qui sont NameNode secondaire
slaves Liste des machines qui sont datanodes et tasktracker
Vous n’avez pas à spécifier le NameNode et le JobTracker dans le fichier « masters ».
Pour la partie HDFS, c’est en lançant le script start-dfs.sh sur la machine qu’elle va être désignée NameNode et executer le démarrage des datanodes listées dans le fichier « slaves ».
Idem pour la partie MapReduce et le script stop-mapred.sh.
Le premier a modifier est celui de l’environnement, puis le core-site.xml et le hdfs-site.xml pour la partie HDFS, enfin le maprep.xml pour la partie Mapreduce.
hadoop-env.sh
export JAVA_HOME=/opt/jdk1.6.0_16
# Taille mémoire allouée à chaque démon (ici 2Go)
export HADOOP_HEAPSIZE=2000
export HADOOP_LOG_DIR=/tmp |
export JAVA_HOME=/opt/jdk1.6.0_16
# Taille mémoire allouée à chaque démon (ici 2Go)
export HADOOP_HEAPSIZE=2000
export HADOOP_LOG_DIR=/tmp
Il existe d’autres options que vous pouvez affiner.
core-site.xml
On définit l’URI du NameNode
<property>
<name>fs.default.name</name>
<value>hdfs://guiguiabloc-namenode/</value>
</property> |
<property>
<name>fs.default.name</name>
<value>hdfs://guiguiabloc-namenode/</value>
</property>
hdfs-site.xml (HDFS)
<!-- ici le chemin local du filesystem où le NameNode stocke ses données -->
dfs.name.dir
/data/hdfs
<!-- ici le chemin local du filesystem où le DataNode stocke ses données -->
dfs.data.dir
/data/hdfs2 |
<!-- ici le chemin local du filesystem où le NameNode stocke ses données -->
dfs.name.dir
/data/hdfs
<!-- ici le chemin local du filesystem où le DataNode stocke ses données -->
dfs.data.dir
/data/hdfs2
mapred-site.xml (MAPREDUCE)
Ici on spécifie le répertoire local qui servira a MapReduce pour écrire ses données temporaires.
Puis le répertoire système proprement dit (dans le filesystem HDFS)
mapred.job.tracker
guiguiabloc-jobtracker:8021
mapred.local.dir
/opt/mapred
mapred.system.dir
/hdfs/mapred/system
mapred.tasktracker.map.tasks.maximum
4 |
mapred.job.tracker
guiguiabloc-jobtracker:8021
mapred.local.dir
/opt/mapred
mapred.system.dir
/hdfs/mapred/system
mapred.tasktracker.map.tasks.maximum
4
slaves
Ici nous spécifions tout les noeuds datanodes/tasktrackers
guiguiabloc-namenode
guiguiabloc-datanode-a
guiguiabloc-datanode-b
Commencons les joyeusetés :
On « formate » notre HDFS (sur guiguiabloc-namenode)
guiguiabloc-namenode:~$ bin/hadoop namenode -format
09/11/12 14:38:31 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = guiguiabloc-namenode/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 0.20.1
STARTUP_MSG: build = http://svn.apache.org/repos/asf/hadoop/common/tags/release-0.20.1-rc1 -r 810220; compiled by 'oom' on Tue Sep 1 20:55:56 UTC 2009
************************************************************/
Re-format filesystem in /data/hdfs ? (Y or N) Y
09/11/12 14:38:33 INFO namenode.FSNamesystem: fsOwner=hadoop,hadoop
09/11/12 14:38:33 INFO namenode.FSNamesystem: supergroup=supergroup
09/11/12 14:38:33 INFO namenode.FSNamesystem: isPermissionEnabled=true
09/11/12 14:38:33 INFO common.Storage: Image file of size 96 saved in 0 seconds.
09/11/12 14:38:34 INFO common.Storage: Storage directory /data/hdfs has been successfully formatted.
09/11/12 14:38:34 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at guiguiabloc-namenode/127.0.1.1
************************************************************/ |
guiguiabloc-namenode:~$ bin/hadoop namenode -format
09/11/12 14:38:31 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = guiguiabloc-namenode/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 0.20.1
STARTUP_MSG: build = http://svn.apache.org/repos/asf/hadoop/common/tags/release-0.20.1-rc1 -r 810220; compiled by 'oom' on Tue Sep 1 20:55:56 UTC 2009
************************************************************/
Re-format filesystem in /data/hdfs ? (Y or N) Y
09/11/12 14:38:33 INFO namenode.FSNamesystem: fsOwner=hadoop,hadoop
09/11/12 14:38:33 INFO namenode.FSNamesystem: supergroup=supergroup
09/11/12 14:38:33 INFO namenode.FSNamesystem: isPermissionEnabled=true
09/11/12 14:38:33 INFO common.Storage: Image file of size 96 saved in 0 seconds.
09/11/12 14:38:34 INFO common.Storage: Storage directory /data/hdfs has been successfully formatted.
09/11/12 14:38:34 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at guiguiabloc-namenode/127.0.1.1
************************************************************/
Puis on démarre le Namenode (qui se chargera de démarrer les datanodes)
$ bin/start-dfs.sh
starting namenode, logging to /tmp/hadoop-hadoop-namenode-guiguiabloc-namenode.out
guiguiabloc-namenode: starting datanode, logging to /tmp/hadoop-hadoop-datanode-guiguiabloc-namenode.out
guiguiabloc-datanode-b: starting datanode, logging to /tmp/hadoop-hadoop-datanode-guiguiabloc-datanode-b.out
guiguiabloc-datanode-a: starting datanode, logging to /tmp/hadoop-hadoop-datanode-guiguiabloc-datanode-a.out
localhost: starting secondarynamenode, logging to /tmp/hadoop-hadoop-secondarynamenode-guiguiabloc-namenode.out |
$ bin/start-dfs.sh
starting namenode, logging to /tmp/hadoop-hadoop-namenode-guiguiabloc-namenode.out
guiguiabloc-namenode: starting datanode, logging to /tmp/hadoop-hadoop-datanode-guiguiabloc-namenode.out
guiguiabloc-datanode-b: starting datanode, logging to /tmp/hadoop-hadoop-datanode-guiguiabloc-datanode-b.out
guiguiabloc-datanode-a: starting datanode, logging to /tmp/hadoop-hadoop-datanode-guiguiabloc-datanode-a.out
localhost: starting secondarynamenode, logging to /tmp/hadoop-hadoop-secondarynamenode-guiguiabloc-namenode.out
Si tout se déroule correctement, vous devriez voir les noeuds esclaves démarrés :
2009-11-12 16:14:38,974 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting DataNode
STARTUP_MSG: host = guiguiabloc-datanode-a/91.xx.xx.xx
STARTUP_MSG: args = []
STARTUP_MSG: version = 0.20.1
STARTUP_MSG: build = http://svn.apache.org/repos/asf/hadoop/common/tags/release-0.20.1-rc1 -r 810220; compiled by 'oom' on Tue Sep 1 20:55:56 UTC 2009
************************************************************/
2009-11-12 16:14:39,297 INFO org.apache.hadoop.hdfs.server.common.Storage: Storage directory /data/hdfs is not formatted.
2009-11-12 16:14:39,297 INFO org.apache.hadoop.hdfs.server.common.Storage: Formatting ...
2009-11-12 16:14:40,062 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Registered FSDatasetStatusMBean
2009-11-12 16:14:40,065 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Opened info server at 50010
2009-11-12 16:14:40,068 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Balancing bandwith is 1048576 bytes/s
... |
2009-11-12 16:14:38,974 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting DataNode
STARTUP_MSG: host = guiguiabloc-datanode-a/91.xx.xx.xx
STARTUP_MSG: args = []
STARTUP_MSG: version = 0.20.1
STARTUP_MSG: build = http://svn.apache.org/repos/asf/hadoop/common/tags/release-0.20.1-rc1 -r 810220; compiled by 'oom' on Tue Sep 1 20:55:56 UTC 2009
************************************************************/
2009-11-12 16:14:39,297 INFO org.apache.hadoop.hdfs.server.common.Storage: Storage directory /data/hdfs is not formatted.
2009-11-12 16:14:39,297 INFO org.apache.hadoop.hdfs.server.common.Storage: Formatting ...
2009-11-12 16:14:40,062 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Registered FSDatasetStatusMBean
2009-11-12 16:14:40,065 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Opened info server at 50010
2009-11-12 16:14:40,068 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Balancing bandwith is 1048576 bytes/s
...
Il ne vous reste qu’a vous connecter sur l’interface http://guiguiabloc-namenode:50070 pour voir l’état de votrte cluster
Maintenant démarrons la partie MapReduce.
hadoop@guiguiabloc-jobtracker:~$ bin/start-mapred.sh
starting jobtracker, logging to /tmp/hadoop-hadoop-jobtracker-guiguiabloc-jobtracker.out
guiguiabloc-namenode: starting tasktracker, logging to /tmp/hadoop-hadoop-tasktracker-guiguiabloc-namenode.out
guiguiabloc-datanode-a: starting tasktracker, logging to /tmp/hadoop-hadoop-tasktracker-guiguiabloc-datanode-a.out
guiguiabloc-datanode-b: starting tasktracker, logging to /tmp/hadoop-hadoop-tasktracker-guiguiabloc-datanode-b.out |
hadoop@guiguiabloc-jobtracker:~$ bin/start-mapred.sh
starting jobtracker, logging to /tmp/hadoop-hadoop-jobtracker-guiguiabloc-jobtracker.out
guiguiabloc-namenode: starting tasktracker, logging to /tmp/hadoop-hadoop-tasktracker-guiguiabloc-namenode.out
guiguiabloc-datanode-a: starting tasktracker, logging to /tmp/hadoop-hadoop-tasktracker-guiguiabloc-datanode-a.out
guiguiabloc-datanode-b: starting tasktracker, logging to /tmp/hadoop-hadoop-tasktracker-guiguiabloc-datanode-b.out
Idem les noeuds tasktracker démarrent également :
2009-11-12 16:58:09,822 INFO org.apache.hadoop.mapred.TaskTracker: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting TaskTracker
STARTUP_MSG: host = guiguiabloc-datanode-b/91.xx.xx.xx
STARTUP_MSG: args = []
STARTUP_MSG: version = 0.20.1
STARTUP_MSG: build = http://svn.apache.org/repos/asf/hadoop/common/tags/release-0.20.1-rc1 -r 810220; compiled by 'oom' on Tue Sep 1 20:55:56 UTC 2009
************************************************************/
...
2009-11-12 16:58:47,185 INFO org.apache.hadoop.ipc.Server: IPC Server handler 6 on 43676: starting
2009-11-12 16:58:47,185 INFO org.apache.hadoop.mapred.TaskTracker: TaskTracker up at: localhost/127.0.0.1:43676
2009-11-12 16:58:47,186 INFO org.apache.hadoop.mapred.TaskTracker: Starting tracker tracker_guiguiabloc-datanode-b:localhost/127.0.0.1:43676
2009-11-12 16:58:47,230 INFO org.apache.hadoop.ipc.Server: IPC Server handler 7 on 43676: starting
2009-11-12 16:58:47,238 INFO org.apache.hadoop.mapred.TaskTracker: Using MemoryCalculatorPlugin : org.apache.hadoop.util.LinuxMemoryCalculatorPlugin@1af33d6
2009-11-12 16:58:47,241 WARN org.apache.hadoop.mapred.TaskTracker: TaskTracker's totalMemoryAllottedForTasks is -1. TaskMemoryManager is disabled.
2009-11-12 16:58:47,242 INFO org.apache.hadoop.mapred.IndexCache: IndexCache created with max memory = 10485760
2009-11-12 16:58:47,243 INFO org.apache.hadoop.mapred.TaskTracker: Starting thread: Map-events fetcher for all reduce tasks on tracker_guiguiabloc-datanode-b:localhost/127.0.0.1:43676 |
2009-11-12 16:58:09,822 INFO org.apache.hadoop.mapred.TaskTracker: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting TaskTracker
STARTUP_MSG: host = guiguiabloc-datanode-b/91.xx.xx.xx
STARTUP_MSG: args = []
STARTUP_MSG: version = 0.20.1
STARTUP_MSG: build = http://svn.apache.org/repos/asf/hadoop/common/tags/release-0.20.1-rc1 -r 810220; compiled by 'oom' on Tue Sep 1 20:55:56 UTC 2009
************************************************************/
...
2009-11-12 16:58:47,185 INFO org.apache.hadoop.ipc.Server: IPC Server handler 6 on 43676: starting
2009-11-12 16:58:47,185 INFO org.apache.hadoop.mapred.TaskTracker: TaskTracker up at: localhost/127.0.0.1:43676
2009-11-12 16:58:47,186 INFO org.apache.hadoop.mapred.TaskTracker: Starting tracker tracker_guiguiabloc-datanode-b:localhost/127.0.0.1:43676
2009-11-12 16:58:47,230 INFO org.apache.hadoop.ipc.Server: IPC Server handler 7 on 43676: starting
2009-11-12 16:58:47,238 INFO org.apache.hadoop.mapred.TaskTracker: Using MemoryCalculatorPlugin : org.apache.hadoop.util.LinuxMemoryCalculatorPlugin@1af33d6
2009-11-12 16:58:47,241 WARN org.apache.hadoop.mapred.TaskTracker: TaskTracker's totalMemoryAllottedForTasks is -1. TaskMemoryManager is disabled.
2009-11-12 16:58:47,242 INFO org.apache.hadoop.mapred.IndexCache: IndexCache created with max memory = 10485760
2009-11-12 16:58:47,243 INFO org.apache.hadoop.mapred.TaskTracker: Starting thread: Map-events fetcher for all reduce tasks on tracker_guiguiabloc-datanode-b:localhost/127.0.0.1:43676
Vous pouvez vérifier l’état de l’ensemble en vous connectant sur http://guiguiabloc-jobtracker:50030
Une fois tout bien démarrer, il ne vous reste qu’a créer les accès pour les utilisateurs :
$ bin/hadoop fs -mkdir /user/username
$ bin/hadoop fs -chown username:username /user/username |
$ bin/hadoop fs -mkdir /user/username
$ bin/hadoop fs -chown username:username /user/username
Pour appliquer un quota d’ 1To a un user par exemple :
$ bin/hadoop dfsadmin -setSpaceQuota 1t /user/username |
$ bin/hadoop dfsadmin -setSpaceQuota 1t /user/username
Des outils de Benchmark sont fournis avec, vous permettant de tester votre cluster :
Par exemple pour tester l’écriture de 10 fichiers de 1G
$ bin/hadoop jar /opt/hadoop/hadoop-0.20.1-test.jar TestDFSIO -write -nrFiles 10 -filesize 1000 |
$ bin/hadoop jar /opt/hadoop/hadoop-0.20.1-test.jar TestDFSIO -write -nrFiles 10 -filesize 1000
Idem pour les Mapreduces
$ bin/hadoop jar /opt/hadoop/hadoop-0.20.1-examples.jar randomwriter random-data
$ bin/hadoop jar /opt/hadoop/hadoop-0.20.1-examples.jar sort random-data sorted-data
Running on 3 nodes to sort from hdfs://guiguiabloc-namenode/user/hadoop/random-data into hdfs://guiguiabloc-namenode/user/hadoop/sorted-data with 5 reduces.
Job started: Thu Nov 12 16:47:41 CET 2009 |
$ bin/hadoop jar /opt/hadoop/hadoop-0.20.1-examples.jar randomwriter random-data
$ bin/hadoop jar /opt/hadoop/hadoop-0.20.1-examples.jar sort random-data sorted-data
Running on 3 nodes to sort from hdfs://guiguiabloc-namenode/user/hadoop/random-data into hdfs://guiguiabloc-namenode/user/hadoop/sorted-data with 5 reduces.
Job started: Thu Nov 12 16:47:41 CET 2009
Dans votre interface d’administration, les Jobs s’afficheront avec le résultat.
Vous voilà désormais à la tête d’un joli cluster Hadoop qu’il est grand temps de mettre à contribution.
Je vous invite a lire les nombreux tuto qui existent sur le site d’Hadoop (http://hadoop.apache.org/common/docs/current/mapred_tutorial.html par exemple).
Voila pour cette première approche d’Hadoop, en espérant que cela à titiller votre envie d’en savoir plus sur cette architecture.
Bien évidemment, je n’ai fait qu’approcher le sujet, j’y reviendrais peut-être dans d’autres billets maitenant que notre architecture Hadoop est en place afin de vous montrer la formidable puissance de cet environnement.
Amusez-vous bien 🙂