{"id":512,"date":"2009-11-12T17:18:14","date_gmt":"2009-11-12T16:18:14","guid":{"rendered":"http:\/\/blog.guiguiabloc.fr\/?p=512"},"modified":"2011-04-29T20:47:16","modified_gmt":"2011-04-29T19:47:16","slug":"hadoop-doop-doop-doop","status":"publish","type":"post","link":"http:\/\/blog.guiguiabloc.fr\/index.php\/2009\/11\/12\/hadoop-doop-doop-doop\/","title":{"rendered":"Hadoop, doop, doop, doop&#8230;"},"content":{"rendered":"<p>Un billet qui propose m\u00eame une version musicale : <a title=\"Jingle pub Antenne2\" href=\"http:\/\/www.youtube.com\/watch?v=LUm19zKdASY\" target=\"_blank\">http:\/\/www.youtube.com\/watch?v=LUm19zKdASY<\/a><\/p>\n<p>Bon ok , je sors&#8230; <img src=\"http:\/\/blog.guiguiabloc.fr\/wp-includes\/images\/smilies\/mrgreen.png\" alt=\":mrgreen:\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/p>\n<p>Vous me direz, j&rsquo;aurais pu faire pire et vous proposer une nouvelle version de <a title=\"Casserole Fred\" href=\"http:\/\/www.youtube.com\/watch?v=KbBzE15emIc\" target=\"_blank\">\u00ab\u00a0Oh ch\u00e9ri, ch\u00e9ri\u00a0\u00bb de Karen Cheryl<\/a> \ud83d\ude00 (d\u00e9sol\u00e9 Fred&#8230; \ud83d\ude09 )<\/p>\n<p>Pour \u00eatre franc avec vous, j&rsquo;ai longuement h\u00e9sit\u00e9 avant de me lancer dans l&rsquo;\u00e9criture de ce billet.<\/p>\n<p>Le sujet est tellement vaste et les possibilit\u00e9s d&rsquo;utilisation si nombreuses qu&rsquo;il m&rsquo;aurait fallu des pages et des pages pour en faire le tour (en plus je suis certain d&rsquo;avoir un retour amus\u00e9 de certaines personnes de mon entourage sur ce billet :-D)<\/p>\n<p>Mais apr\u00e8s tout, pourquoi pas ? Donc je vais l&rsquo;aborder sans plonger dans les d\u00e9tails mais suffisamment, je pense, pour pouvoir vous amuser (c&rsquo;est bien le but, non ? \ud83d\ude00 )<\/p>\n<p><strong>Hadoop, quoi que c&rsquo;est ?<\/strong><\/p>\n<p>Pour citer <a title=\"Wikipedia Hadoop\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Hadoop\" target=\"_blank\">Wikip\u00e9dia<\/a> :<\/p>\n<p><strong>\u00ab\u00a0Hadoop<\/strong> est un framework java libre destin\u00e9 aux applications distribu\u00e9s et \u00e0 la gestion intensive des donn\u00e9es. Il permet aux applications de travailler avec des milliers de n\u0153uds et des p\u00e9taoctets de donn\u00e9es. Hadoop a \u00e9t\u00e9 inspir\u00e9 par les publications MapReduce, GoogleFS et BigTable de Google.\u00a0\u00bb<\/p>\n<p>Parmi les \u00e9l\u00e9ments composant Hadoop, nous allons retrouver principalement:<\/p>\n<p>&#8211; <a title=\"http:\/\/hadoop.apache.org\/hdfs\/\" href=\"http:\/\/hadoop.apache.org\/hdfs\/\" target=\"_blank\">HDFS<\/a> (Hadoop Distributed File System), le syst\u00e8me de fichiers distribu\u00e9s<\/p>\n<p>&#8211; <a title=\"http:\/\/hadoop.apache.org\/mapreduce\/\" href=\"http:\/\/hadoop.apache.org\/mapreduce\/\" target=\"_blank\">MAPREDUCE<\/a> , un framework pour les calculs parall\u00e8les et distribu\u00e9s<\/p>\n<p>&#8211; <a title=\"http:\/\/hadoop.apache.org\/hbase\/\" href=\"http:\/\/hadoop.apache.org\/hbase\/\" target=\"_blank\">HBASE<\/a> , la base de donn\u00e9es distribu\u00e9es<\/p>\n<p>&#8211; <a title=\"http:\/\/hadoop.apache.org\/zookeeper\/\" href=\"http:\/\/hadoop.apache.org\/zookeeper\/\" target=\"_blank\">ZOOKEEPER<\/a> , un service de centralisation pour coordonner les syst\u00e8mes distribu\u00e9s<\/p>\n<p>&#8211; <a title=\"http:\/\/hadoop.apache.org\/pig\/\" href=\"http:\/\/hadoop.apache.org\/pig\/\" target=\"_blank\">PIG<\/a> , plateforme pour l&rsquo;analyse d&rsquo;un grand nombre de donn\u00e9es<\/p>\n<p>Vous l&rsquo;avez compris, Hadoop sert principalement au traitement de gros volumes de donn\u00e9es.<\/p>\n<p>A cet effet, je vous invite \u00e0 regarder la vid\u00e9o d&rsquo;<a title=\"Olivier Grisel\" href=\"http:\/\/twitter.com\/ogrisel\" target=\"_blank\">Olivier Grisel <\/a>lors de sa pr\u00e9sentation d&rsquo;Hadoop et MapReduce a <span id=\"main\" style=\"visibility: visible;\"><span id=\"search\" style=\"visibility: visible;\">l&rsquo;Open Source Developers Conference 2009 (vous retrouverez cette pr\u00e9sentation <a title=\"OSDC Hadoop\" href=\"http:\/\/www.slideshare.net\/ogrisel\/hadoop-mapreduce-osdc-fr-2009-2113973\" target=\"_blank\">ICI <\/a>).<\/span><\/span><\/p>\n<p>Vous me direz \u00ab\u00a0Oui mais bon, en quoi \u00e7a me concerne moi ???\u00a0\u00bb.<\/p>\n<p>Tsss, petit scarab\u00e9e, il n&rsquo;y a pas si longtemps, <span style=\"text-decoration: line-through;\">dans une galaxie lointaine<\/span>, vous stockiez l&rsquo;int\u00e9gralit\u00e9 de vos photos de vacances de votre vie sur un disque de 10 Go&#8230;.<\/p>\n<p>Aujourd&rsquo;hui o\u00f9 le moindre APN bas de gamme prend une photo de 5 Mo, je vous laisse imaginer la volum\u00e9trie n\u00e9cessaire pour stocker l&rsquo;int\u00e9gralit\u00e9 de vos clich\u00e9s de vacances avec Tata Simone et surtout la cousine Juliette&#8230;<\/p>\n<p>Bref, vous l&rsquo;avez compris, la capacit\u00e9 des disques augmentent mais les vitesses de transfert, elles ne suivent pas.<\/p>\n<p>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\u00e8rement. De nos jours, pour un disque d&rsquo;1To, avec un taux de transfert de 100 Mo\/sec, il vous faut presque 2h30 pour la m\u00eame op\u00e9ration&#8230;<\/p>\n<p>Diviser ces donn\u00e9es sur 100 disques et, par cette lecture parall\u00e8le, toutes les donn\u00e9es peuvent \u00eatre lues en moins de 2 minutes.<\/p>\n<p>Ceux qui utilisent le syst\u00e8me RAID doivent comprendre \ud83d\ude09<\/p>\n<p>Pour de plus amples d\u00e9tails, je vous invite a parcourir le Wiki Hadoop ou vous plonger dans l&rsquo;excellent \u00ab\u00a0Hadoop, The definitive Guide\u00a0\u00bb <a title=\"http:\/\/oreilly.com\/catalog\/9780596521981\" href=\"http:\/\/oreilly.com\/catalog\/9780596521981\" target=\"_blank\">chez O&rsquo;Reilly<\/a> .<\/p>\n<p>Pour bien comprendre le fonctionnement d&rsquo;Hadoop, comme toujours, un joli dessin pour tenter de conceptualiser le bouzin.<\/p>\n<p><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/guiguiabloc-hadoop.png\"><img loading=\"lazy\" class=\"aligncenter size-medium wp-image-525\" title=\"guiguiabloc-hadoop\" src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/guiguiabloc-hadoop-300x216.png\" alt=\"\" width=\"300\" height=\"216\" \/><\/a><\/p>\n<p>Il faut discerner tout d&rsquo;abord la partie HDFS qui est le syst\u00e8me de fichier distribu\u00e9 d&rsquo;Hadoop, compos\u00e9 d&rsquo;un serveur ma\u00eetre, le NameNode et de serveurs d\u00e9tenant les donn\u00e9es proprement dites, les Datanodes.<\/p>\n<p>Quand une application cliente a besoin d&rsquo;acc\u00e9der 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&rsquo;application cliente va directement interroger le(s) Datanodes.<\/p>\n<p>Dans une architecture HDFS, un fichier est d\u00e9coup\u00e9 en un ou plusieurs blocs et r\u00e9parti sur les datanodes du cluster. De plus, chaque bloc est r\u00e9pliqu\u00e9 suivant le facteur de r\u00e9plication que vous avez sp\u00e9cifi\u00e9 dans votre configuration.<\/p>\n<p><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/hdfsarchitecture.gif\"><img loading=\"lazy\" class=\"aligncenter size-medium wp-image-526\" title=\"hdfsarchitecture\" src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/hdfsarchitecture-300x207.gif\" alt=\"\" width=\"300\" height=\"207\" \/><\/a><\/p>\n<p>Je ne vais pas vous expliquer en d\u00e9tails la fa\u00e7on dont est architectur\u00e9 HDFS, je vous invite \u00e0 lire cette page pour bien comprendre la structure :<\/p>\n<p><a title=\"http:\/\/hadoop.apache.org\/common\/docs\/current\/hdfs_design.html\" href=\"http:\/\/hadoop.apache.org\/common\/docs\/current\/hdfs_design.html\" target=\"_blank\">http:\/\/hadoop.apache.org\/common\/docs\/current\/hdfs_design.html<\/a><\/p>\n<p>Ensuite, par dessus HDFS, nous avons la partie moteur MAP\/REDUCE avec un JobTracker, genre de centralisateur de t\u00e2ches, et des TaskTracker qui se chargent d&rsquo;executer les travaux demand\u00e9s.<\/p>\n<p>Le Client soumet la requ\u00e8te de travail au JobTracker qui va les transmettre au(x) TaskTracker concern\u00e9(s) en s&rsquo;efforcant d&rsquo;\u00eatre au plus proche de la donn\u00e9e.<\/p>\n<p>Concernant MapReduce, son r\u00f4le consiste \u00e0 diviser le traitement en 2 \u00e9tapes :<\/p>\n<ul>\n<li> la premi\u00e8re phase (Map) est une \u00e9tape d\u2019ingestion et de transformation des donn\u00e9es sous la forme de paires cl\u00e9\/valeur<\/li>\n<li>la seconde phase (Reduce) est une \u00e9tape de fusion des enregistrements par cl\u00e9 pour former le r\u00e9sultat final<\/li>\n<\/ul>\n<p>Source :  <a title=\"http:\/\/www.internetcollaboratif.info\/index.php\/hadoop-mapreduce-principe-en-resume\/\" href=\"http:\/\/www.internetcollaboratif.info\/index.php\/hadoop-mapreduce-principe-en-resume\/\" target=\"_blank\">InternetCollaboratif<\/a><br \/>\n, sinon je vous invite \u00e0 vous rendre sur <a title=\"http:\/\/fr.wikipedia.org\/wiki\/MapReduce\" href=\"http:\/\/fr.wikipedia.org\/wiki\/MapReduce\" target=\"_blank\">cette page de Wikip\u00e9dia <\/a>qui vous donnera un peu plus d&rsquo;explication sur son fonctionnement (inutile que je vous raconte la m\u00eame chose \ud83d\ude42 )<\/p>\n<p>Sachez enfin qu&rsquo;Hadoop est utilis\u00e9 chez Yahoo!, Facebook, le New York Times, Last.fm etc&#8230; Bref, d\u00e9j\u00e0 bien \u00e9prouv\u00e9 en production&#8230;<\/p>\n<p>Bien, tr\u00eave de bavardage, attaquons nous a tout cela.<\/p>\n<p>La soci\u00e9t\u00e9 <a title=\"Cloudera\" href=\"http:\/\/www.cloudera.com\/hadoop\" target=\"_blank\">Cloudera<\/a> propose sur son site une installation automatis\u00e9e d&rsquo;Hadoop, permettant de monter son cluster Hadoop en trois clics et configurable \u00e0 souhait.<\/p>\n<p>Excellente initiative qui m\u00e9rite d&rsquo;\u00eatre salu\u00e9e.<\/p>\n<p>Mais bon, nous, <a title=\"Meme pas peur\" href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/memepaspeur.jpg\" target=\"_blank\">on n&rsquo;a pas peur<\/a>, on est m\u00eame <a title=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/bigballs.jpg\" href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/bigballs.jpg\" target=\"_blank\">plut\u00f4t \u00ab\u00a0couillu\u00a0\u00bb<\/a> donc on va se la faire en mode installation a la mimine.<\/p>\n<p><strong>Pr\u00e9-requis<\/strong> :<\/p>\n<p>&#8211; Un JAVA 1.6 sur les serveurs : <a title=\"http:\/\/java.sun.com\/javase\/downloads\/index.jsp\" href=\"http:\/\/java.sun.com\/javase\/downloads\/index.jsp\" target=\"_blank\">http:\/\/java.sun.com\/javase\/downloads\/index.jsp<\/a><\/p>\n<p>&#8211; Un utilisateur \u00ab\u00a0hadoop\u00a0\u00bb par exemple<\/p>\n<p>&#8211; une paire de cl\u00e9s ssh priv\u00e9\/publique pour cet utilisateur afin de contr\u00f4ler les noeuds du cluster<\/p>\n<p>T\u00e9l\u00e9chargez les sources sur : <a title=\"http:\/\/hadoop.apache.org\/core\/releases.html\" href=\"http:\/\/hadoop.apache.org\/core\/releases.html\" target=\"_blank\">http:\/\/hadoop.apache.org\/core\/releases.html<\/a><\/p>\n<pre lang=\"text\">tar xzvf hadoop-0.20.1.tar.gz\r\n\r\nchown -R hadoop:hadoop hadoop-0.20.1\r\nsu - hadoop\r\nssh-keygen -t dsa -P '' -f ~\/.ssh\/id_dsa\r\nssh localhost (et sur les autres noeuds \u00e9galement)<\/pre>\n<p>Il existe 3 modes d&rsquo;installation d&rsquo;Hadoop :<\/p>\n<ol>\n<li>Mode StandAlone (local)<\/li>\n<li>Mode Pseudo-Distributed(chaque d\u00e9mon Hadoop est lanc\u00e9 dans un process Java ind\u00e9pendant)<\/li>\n<li>Mode Fully-Distributed (Cluster)<\/li>\n<\/ol>\n<p>Bien \u00e9videmment, nous, <a title=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/big_balls.jpg\" href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/big_balls.jpg\" target=\"_blank\">m\u00eame pas peur<\/a>, on va se faire l&rsquo;installation \u00ab\u00a0Cluster\u00a0\u00bb.<\/p>\n<p>Pour ce billet, je vais partir sur un cluster de 4 machines comme d\u00e9cris dans le sch\u00e9ma plus haut.<\/p>\n<p>Pour faciliter les tests, le NameNode sera \u00e9galement DataNode.<\/p>\n<p>Un petit dessin reprenant le nom des machines et leurs r\u00f4les pour la suite :<\/p>\n<p><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/guiguiabloc-hadoop2.png\"><img loading=\"lazy\" class=\"aligncenter size-medium wp-image-532\" title=\"Cluster Hadoop\" src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/guiguiabloc-hadoop2-300x199.png\" alt=\"\" width=\"300\" height=\"199\" \/><\/a><\/p>\n<p>Les fichiers de configurations se trouve dans.. conf.<\/p>\n<p>Voici les principaux :<\/p>\n<p>hadoop-env.sh\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Variables d&rsquo;environment utilis\u00e9es par Hadoop<br \/>\ncore-site.xml\u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Configuration principal (comme les param\u00e8tres I\/O pour HDFS et MapReduce<br \/>\nhdfs-site.xml\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Configuration des d\u00e9mons HDFS<br \/>\nmapred-site.xml\u00a0\u00a0\u00a0\u00a0\u00a0 Configuration pour le d\u00e9mon MapReduce (jobtracker et les tasktrackers)<br \/>\nmasters\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Liste des machines qui sont NameNode secondaire<br \/>\nslaves\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Liste des machines qui sont datanodes et tasktracker<br \/>\nVous n&rsquo;avez pas \u00e0 sp\u00e9cifier le NameNode et le JobTracker dans le fichier \u00ab\u00a0masters\u00a0\u00bb.<\/p>\n<p>Pour la partie HDFS, c&rsquo;est en lan\u00e7ant le script start-dfs.sh sur la machine qu&rsquo;elle va \u00eatre d\u00e9sign\u00e9e NameNode et executer le d\u00e9marrage des datanodes list\u00e9es dans le fichier \u00ab\u00a0slaves\u00a0\u00bb.<\/p>\n<p>Idem pour la partie MapReduce et le script stop-mapred.sh.<\/p>\n<p>Le premier a modifier est celui de l&rsquo;environnement, puis le core-site.xml et le hdfs-site.xml pour la partie HDFS, enfin le maprep.xml pour la partie Mapreduce.<\/p>\n<p><strong><span class=\"codefrag\">hadoop-env.sh<\/span><\/strong><\/p>\n<pre lang=\"text\">export JAVA_HOME=\/opt\/jdk1.6.0_16\r\n\r\n# Taille m\u00e9moire allou\u00e9e \u00e0 chaque d\u00e9mon (ici 2Go)\r\n\r\nexport HADOOP_HEAPSIZE=2000\r\n\r\nexport HADOOP_LOG_DIR=\/tmp<\/pre>\n<p>Il existe d&rsquo;autres options que vous pouvez affiner.<\/p>\n<p><strong>core-site.xml<\/strong><\/p>\n<p>On d\u00e9finit l&rsquo;URI du NameNode<\/p>\n<pre lang=\"text\">\r\n <property>\r\n<name>fs.default.name<\/name>\r\n<value>hdfs:\/\/guiguiabloc-namenode\/<\/value>\r\n<\/property>\r\n<\/pre>\n<p><strong>hdfs-site.xml (HDFS) <\/strong><\/p>\n<pre lang=\"text\">\r\n<!--  ici le chemin local du filesystem o\u00f9 le NameNode stocke ses donn\u00e9es -->\r\ndfs.name.dir\r\n\/data\/hdfs\r\n\r\n<!--  ici le chemin local du filesystem o\u00f9 le DataNode stocke ses donn\u00e9es -->\r\ndfs.data.dir\r\n\/data\/hdfs2<\/pre>\n<p><strong>mapred-site.xml (MAPREDUCE)<\/strong><\/p>\n<p>Ici on sp\u00e9cifie le r\u00e9pertoire local qui servira a MapReduce pour \u00e9crire ses donn\u00e9es temporaires.<\/p>\n<p>Puis le r\u00e9pertoire syst\u00e8me proprement dit (dans le filesystem HDFS)<\/p>\n<pre lang=\"text\">\r\nmapred.job.tracker\r\nguiguiabloc-jobtracker:8021\r\n\r\nmapred.local.dir\r\n\/opt\/mapred\r\n\r\nmapred.system.dir\r\n\/hdfs\/mapred\/system\r\n\r\nmapred.tasktracker.map.tasks.maximum\r\n4<\/pre>\n<p><strong>slaves<\/strong><\/p>\n<p>Ici nous sp\u00e9cifions tout les noeuds datanodes\/tasktrackers<\/p>\n<p>guiguiabloc-namenode<br \/>\nguiguiabloc-datanode-a<br \/>\nguiguiabloc-datanode-b<\/p>\n<p>Commencons les joyeuset\u00e9s :<\/p>\n<p>On \u00ab\u00a0formate\u00a0\u00bb notre HDFS (sur guiguiabloc-namenode)<\/p>\n<pre lang=\"text\">guiguiabloc-namenode:~$ bin\/hadoop namenode -format\r\n09\/11\/12 14:38:31 INFO namenode.NameNode: STARTUP_MSG:\r\n\/************************************************************\r\nSTARTUP_MSG: Starting NameNode\r\nSTARTUP_MSG:\u00a0\u00a0 host = guiguiabloc-namenode\/127.0.1.1\r\nSTARTUP_MSG:\u00a0\u00a0 args = [-format]\r\nSTARTUP_MSG:\u00a0\u00a0 version = 0.20.1\r\nSTARTUP_MSG:\u00a0\u00a0 build = http:\/\/svn.apache.org\/repos\/asf\/hadoop\/common\/tags\/release-0.20.1-rc1 -r 810220; compiled by 'oom' on Tue Sep\u00a0 1 20:55:56 UTC 2009\r\n************************************************************\/\r\nRe-format filesystem in \/data\/hdfs ? (Y or N) Y\r\n09\/11\/12 14:38:33 INFO namenode.FSNamesystem: fsOwner=hadoop,hadoop\r\n09\/11\/12 14:38:33 INFO namenode.FSNamesystem: supergroup=supergroup\r\n09\/11\/12 14:38:33 INFO namenode.FSNamesystem: isPermissionEnabled=true\r\n09\/11\/12 14:38:33 INFO common.Storage: Image file of size 96 saved in 0 seconds.\r\n09\/11\/12 14:38:34 INFO common.Storage: Storage directory \/data\/hdfs has been successfully formatted.\r\n09\/11\/12 14:38:34 INFO namenode.NameNode: SHUTDOWN_MSG:\r\n\/************************************************************\r\nSHUTDOWN_MSG: Shutting down NameNode at guiguiabloc-namenode\/127.0.1.1\r\n************************************************************\/<\/pre>\n<p>Puis on d\u00e9marre le Namenode (qui se chargera de d\u00e9marrer les datanodes)<\/p>\n<pre lang=\"text\">$ bin\/start-dfs.sh\r\nstarting namenode, logging to \/tmp\/hadoop-hadoop-namenode-guiguiabloc-namenode.out\r\nguiguiabloc-namenode: starting datanode, logging to \/tmp\/hadoop-hadoop-datanode-guiguiabloc-namenode.out\r\nguiguiabloc-datanode-b: starting datanode, logging to \/tmp\/hadoop-hadoop-datanode-guiguiabloc-datanode-b.out\r\nguiguiabloc-datanode-a: starting datanode, logging to \/tmp\/hadoop-hadoop-datanode-guiguiabloc-datanode-a.out\r\nlocalhost: starting secondarynamenode, logging to \/tmp\/hadoop-hadoop-secondarynamenode-guiguiabloc-namenode.out<\/pre>\n<p>Si tout se d\u00e9roule correctement, vous devriez voir les noeuds esclaves d\u00e9marr\u00e9s :<\/p>\n<pre lang=\"text\">2009-11-12 16:14:38,974 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: STARTUP_MSG:\r\n\/************************************************************\r\nSTARTUP_MSG: Starting DataNode\r\nSTARTUP_MSG:\u00a0\u00a0 host = guiguiabloc-datanode-a\/91.xx.xx.xx\r\nSTARTUP_MSG:\u00a0\u00a0 args = []\r\nSTARTUP_MSG:\u00a0\u00a0 version = 0.20.1\r\nSTARTUP_MSG:\u00a0\u00a0 build = http:\/\/svn.apache.org\/repos\/asf\/hadoop\/common\/tags\/release-0.20.1-rc1 -r 810220; compiled by 'oom' on Tue Sep\u00a0 1 20:55:56 UTC 2009\r\n************************************************************\/\r\n2009-11-12 16:14:39,297 INFO org.apache.hadoop.hdfs.server.common.Storage: Storage directory \/data\/hdfs is not formatted.\r\n2009-11-12 16:14:39,297 INFO org.apache.hadoop.hdfs.server.common.Storage: Formatting ...\r\n2009-11-12 16:14:40,062 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Registered FSDatasetStatusMBean\r\n2009-11-12 16:14:40,065 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Opened info server at 50010\r\n2009-11-12 16:14:40,068 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Balancing bandwith is 1048576 bytes\/s\r\n...<\/pre>\n<p>Il ne vous reste qu&rsquo;a vous connecter sur l&rsquo;interface http:\/\/guiguiabloc-namenode:50070 pour voir l&rsquo;\u00e9tat de votrte cluster<\/p>\n<p><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/starthdfs.png\"><img loading=\"lazy\" class=\"aligncenter size-medium wp-image-535\" title=\"Interface HDFS\" src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/starthdfs-300x269.png\" alt=\"\" width=\"300\" height=\"269\" \/><\/a><\/p>\n<p>Maintenant d\u00e9marrons la partie MapReduce.<\/p>\n<pre lang=\"text\">hadoop@guiguiabloc-jobtracker:~$ bin\/start-mapred.sh\r\nstarting jobtracker, logging to \/tmp\/hadoop-hadoop-jobtracker-guiguiabloc-jobtracker.out\r\nguiguiabloc-namenode: starting tasktracker, logging to \/tmp\/hadoop-hadoop-tasktracker-guiguiabloc-namenode.out\r\nguiguiabloc-datanode-a: starting tasktracker, logging to \/tmp\/hadoop-hadoop-tasktracker-guiguiabloc-datanode-a.out\r\nguiguiabloc-datanode-b: starting tasktracker, logging to \/tmp\/hadoop-hadoop-tasktracker-guiguiabloc-datanode-b.out<\/pre>\n<p>Idem les noeuds tasktracker d\u00e9marrent \u00e9galement :<\/p>\n<pre lang=\"text\">2009-11-12 16:58:09,822 INFO org.apache.hadoop.mapred.TaskTracker: STARTUP_MSG:\r\n\/************************************************************\r\nSTARTUP_MSG: Starting TaskTracker\r\nSTARTUP_MSG:\u00a0\u00a0 host = guiguiabloc-datanode-b\/91.xx.xx.xx\r\nSTARTUP_MSG:\u00a0\u00a0 args = []\r\nSTARTUP_MSG:\u00a0\u00a0 version = 0.20.1\r\nSTARTUP_MSG:\u00a0\u00a0 build = http:\/\/svn.apache.org\/repos\/asf\/hadoop\/common\/tags\/release-0.20.1-rc1 -r 810220; compiled by 'oom' on Tue Sep\u00a0 1 20:55:56 UTC 2009\r\n************************************************************\/\r\n...\r\n2009-11-12 16:58:47,185 INFO org.apache.hadoop.ipc.Server: IPC Server handler 6 on 43676: starting\r\n2009-11-12 16:58:47,185 INFO org.apache.hadoop.mapred.TaskTracker: TaskTracker up at: localhost\/127.0.0.1:43676\r\n2009-11-12 16:58:47,186 INFO org.apache.hadoop.mapred.TaskTracker: Starting tracker tracker_guiguiabloc-datanode-b:localhost\/127.0.0.1:43676\r\n2009-11-12 16:58:47,230 INFO org.apache.hadoop.ipc.Server: IPC Server handler 7 on 43676: starting\r\n2009-11-12 16:58:47,238 INFO org.apache.hadoop.mapred.TaskTracker:\u00a0 Using MemoryCalculatorPlugin : org.apache.hadoop.util.LinuxMemoryCalculatorPlugin@1af33d6\r\n2009-11-12 16:58:47,241 WARN org.apache.hadoop.mapred.TaskTracker: TaskTracker's totalMemoryAllottedForTasks is -1. TaskMemoryManager is disabled.\r\n2009-11-12 16:58:47,242 INFO org.apache.hadoop.mapred.IndexCache: IndexCache created with max memory = 10485760\r\n2009-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<\/pre>\n<p>Vous pouvez v\u00e9rifier l&rsquo;\u00e9tat de l&rsquo;ensemble en vous connectant sur http:\/\/guiguiabloc-jobtracker:50030<\/p>\n<p><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/startmapred.png\"><img loading=\"lazy\" class=\"aligncenter size-medium wp-image-536\" title=\"Interface JobTracker\" src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2009\/11\/startmapred-300x218.png\" alt=\"\" width=\"300\" height=\"218\" \/><\/a><\/p>\n<p>Une fois tout bien d\u00e9marrer, il ne vous reste qu&rsquo;a cr\u00e9er les acc\u00e8s pour les utilisateurs :<\/p>\n<pre lang=\"text\">$ bin\/hadoop fs -mkdir \/user\/username\r\n$ bin\/hadoop fs -chown username:username \/user\/username<\/pre>\n<p>Pour appliquer un quota d&rsquo; 1To a un user par exemple :<\/p>\n<pre lang=\"text\">$ bin\/hadoop dfsadmin -setSpaceQuota 1t \/user\/username<\/pre>\n<p>Des outils de Benchmark sont fournis avec, vous permettant de tester votre cluster :<\/p>\n<p>Par exemple pour tester l&rsquo;\u00e9criture de 10 fichiers de 1G<\/p>\n<pre lang=\"text\">$ bin\/hadoop jar \/opt\/hadoop\/hadoop-0.20.1-test.jar TestDFSIO -write -nrFiles 10 -filesize 1000<\/pre>\n<p>Idem pour les Mapreduces<\/p>\n<pre lang=\"text\">$ bin\/hadoop jar \/opt\/hadoop\/hadoop-0.20.1-examples.jar randomwriter random-data\r\n$ bin\/hadoop jar \/opt\/hadoop\/hadoop-0.20.1-examples.jar sort random-data sorted-data\r\nRunning on 3 nodes to sort from hdfs:\/\/guiguiabloc-namenode\/user\/hadoop\/random-data into hdfs:\/\/guiguiabloc-namenode\/user\/hadoop\/sorted-data with 5 reduces.\r\nJob started: Thu Nov 12 16:47:41 CET 2009<\/pre>\n<p>Dans votre interface d&rsquo;administration, les Jobs s&rsquo;afficheront avec le r\u00e9sultat.<\/p>\n<p>Vous voil\u00e0 d\u00e9sormais \u00e0 la t\u00eate d&rsquo;un joli cluster Hadoop qu&rsquo;il est grand temps de mettre \u00e0 contribution.<\/p>\n<p>Je vous invite a lire les nombreux tuto qui existent sur le site d&rsquo;Hadoop (http:\/\/hadoop.apache.org\/common\/docs\/current\/mapred_tutorial.html par exemple).<\/p>\n<p>Voila pour cette premi\u00e8re approche d&rsquo;Hadoop, en esp\u00e9rant que cela \u00e0 titiller votre envie d&rsquo;en savoir plus sur cette architecture.<\/p>\n<p>Bien \u00e9videmment, je n&rsquo;ai fait qu&rsquo;approcher le sujet, j&rsquo;y reviendrais peut-\u00eatre dans d&rsquo;autres billets maitenant que notre architecture Hadoop est en place afin de vous montrer la formidable puissance de cet environnement.<\/p>\n<p>Amusez-vous bien \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un billet qui propose m\u00eame une version musicale : http:\/\/www.youtube.com\/watch?v=LUm19zKdASY Bon ok , je sors&#8230; Vous me direz, j&rsquo;aurais pu faire pire et vous proposer une nouvelle version de \u00ab\u00a0Oh ch\u00e9ri, ch\u00e9ri\u00a0\u00bb de Karen Cheryl \ud83d\ude00 (d\u00e9sol\u00e9 Fred&#8230; \ud83d\ude09 ) &hellip; <a href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2009\/11\/12\/hadoop-doop-doop-doop\/\">Read More <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[27,7,8],"tags":[127,128,129],"_links":{"self":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/512"}],"collection":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/comments?post=512"}],"version-history":[{"count":24,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/512\/revisions"}],"predecessor-version":[{"id":541,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/512\/revisions\/541"}],"wp:attachment":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/media?parent=512"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/categories?post=512"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/tags?post=512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}