Académique Documents
Professionnel Documents
Culture Documents
Atelier Big Data
Atelier Big Data
Avant d’installer Hadoop, il faut installer Java si ce n’est pas déjà fait.
On peut télécharger la JDK sur le site d’Oracle:
1
Cette commande permet d’extraire les fichiers contenus dans
l’archive en listant tous les fichiers extraits.
En tant qu’utilisateur root, placer le répertoire résultant dans
/usr/java.
Pour passer en tant qu’utilisateur root, il faut taper:
su
mkdir /etc/hadoop
ssh localhost
3
5.1. Configuration d’Hadoop
Dans un premier temps, il faut configurer le chemin de la JDK dans le
fichier de configuration d’Hadoop hadoop-env.sh. Ce fichier se
trouve dans /usr/hadoop/hadoop-2.8.5/etc/hadoop/. On peut l’éditer en
tant qu’utilisateur root et en remplaçant:
export JAVA_HOME=${JAVA_HOME}
par:
export JAVA_HOME=/usr/java/jdk1.8.0_202/
4
5.2. Configuration du cluster en mode pseudo-distribué
Cette configuration correspond à la partie Pseudo-Distributed-Operation.
Elle permet de configurer le cluster en mode pseudo-distribué (puisqu’il
n’y a qu’une seule machine).
Il faut éditer le fichier core-site.xml dans le répertoire: /usr/hadoop/hadoop-
2.8.5/etc/hadoop/ en ajoutant:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
5
On peut créer le répertoire qui va contenir les logs lors de l’exécution en
écrivant:
mkdir /usr/hadoop/hadoop-2.8.5/logs
http://localhost:50070/
6
On devrait voir une interface du type :
7
2017-09-16 09:41:21,836 WARN org.apache.hadoop.ipc.Client: Failed to connect
to server: localhost/127.0.0.1:9000: retries get failed due to exceeded maximum
allowed retries number: 10
java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) at
sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
at
org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:
206)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:495) at
org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:681)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:777)
at org.apache.hadoop.ipc.Client$Connection.access$3500(Client.java:409)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1542) at
org.apache.hadoop.ipc.Client.call(Client.java:1373)
at org.apache.hadoop.ipc.Client.call(Client.java:1337)
at
org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.ja
va:227)
at
org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.ja
va:116)
at com.sun.proxy.$Proxy15.versionRequest(Unknown Source) at
org.apache.hadoop.hdfs.protocolPB.DatanodeProtocolClientSideTranslatorPB.ve
rsionRequest(DatanodeProtocolClientSideTranslatorPB.java:274)
at
org.apache.hadoop.hdfs.server.datanode.BPServiceActor.retrieveNamespaceInfo
(BPServiceActor.java:215)
at
org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandsha
ke(BPServiceActor.java:261)
at
org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.ja
va:746)
at java.lang.Thread.run(Thread.java:748)
8
2017-09-16 09:43:29,013 INFO org.apache.hadoop.ipc.Client: Retrying connect
to server: localhost/127.0.0.1:9000. Already tried 1 time(s); retry policy is
RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
etc...
L’erreur semble provenir du fait qu’Hadoop est sensible aux
redirections DNS effectuées par Linux entre l’adresse localhost dirigée vers
127.0.0.1 et le nom réseau de la machine dirigée vers 127.0.1.1.
Tout d’abord avant de commencer à changer la configuration, il faut
stopper l’exécution d’HDFS et de YARN si ce n’est pas déjà fait (en tant
qu’utilisateur “hduser”) en exécutant:
/usr/hadoop/hadoop-2.8.5/sbin/stop-yarn.sh
/usr/hadoop/hadoop-2.8.5/sbin/stop-dfs.sh
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
9
#::1 localhost ip6-localhost ip6-loopback
#ff02::1 ip6-allnodes
#ff02::2 ip6-allrouters
Il faut ensuite affiner la configuration pour que certains fichiers
temporaires soient créés dans le répertoire de l’utilisateur “hduser”. Il faut
éditer le fichier core-site.xml et ajouter quelques éléments de configuration:
nano /usr/hadoop/hadoop-2.8.5/etc/hadoop/core-site.xml
start-dfs.sh
6. YARN
11
6.2. Exécution de YARN
Après la configuration, on peut démarrer le daemon ResourceManager
et NodeManager en tapant:
start-yarn.sh
Cette commande est dans un répertoire rajouté dans la variable
d’environnement PATH donc elle doit être accessible de n’importe où. Ce
fichier se trouve dans /usr/hadoop/hadoop-2.8.5/sbin/start-yarn.sh.
L’interface web du ResourceManager est accessible à l’adresse:
http://localhost:8088/
L’interface est du type:
12
Comme texte d’entrée, on peut utiliser le fichier correspondant au
livre Guerre et Paix: http://www.gutenberg.org/files/2600/2600-0.txt
Il faut copier ce fichier dans HDFS en écrivant:
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/hduser
hdfs dfs -mkdir /user/hduser/input
hdfs dfs -put 2600-0.txt /user/hduser/input
A ce moment on peut voir le fichier dans HDFS si on va dans l’interface
web de Hadoop à l’adresse http://localhost:50070 dans l’onglet Utilities ➔
Browse the file system:
Figure 3 : HDFS
13
le fichier JAR hadoop-examples-2.8.5.jar avec en entrée le fichier 2600-0.txt qui
a été copié dans HDFS. Le résultat sera écrit dans le répertoire output dans
HDFS.
L’exécution donnera en sortie:
17/09/09 12:16:44 INFO client.RMProxy: Connecting to
ResourceManager at /0.0.0.0:8032
17/09/09 12:16:45 INFO input.FileInputFormat: Total input files to
process : 1
17/09/09 12:16:46 INFO mapreduce.JobSubmitter: number of splits:1
17/09/09 12:16:47 INFO mapreduce.JobSubmitter: Submitting tokens for
job: job_1504949218149_0001
17/09/09 12:16:48 INFO impl.YarnClientImpl: Submitted
application application_1504949218149_0001
17/09/09 12:16:48 INFO mapreduce.Job: The url to track the job:
http://debianvm:8088/proxy/application_1504949218149_0001/
17/09/09 12:16:48 INFO mapreduce.Job: Running job:
job_1504949218149_0001
17/09/09 12:17:09 INFO mapreduce.Job: Job
job_1504949218149_0001
running in uber mode : false
17/09/09 12:17:09 INFO mapreduce.Job: map 0% reduce 0%
17/09/09 12:17:39 INFO mapreduce.Job: map 100% reduce 0%
17/09/09 12:17:53 INFO mapreduce.Job: map 100% reduce 100% 17/09/09
12:17:57 INFO mapreduce.Job: Job
job_1504949218149_0001
completed successfully
17/09/09 12:17:57 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=649694
FILE: Number of bytes written=1571945
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=3359665 HDFS: Number of bytes
written=487290 HDFS: Number of read operations=6
HDFS: Number of large read operations=0 HDFS: Number of write
operations=2
Job Counters
Launched map tasks=1 Launched reduce tasks=1 Data-local map
tasks=1
Total time spent by all maps in occupied slots (ms)=27460
Total time spent by all reduces in occupied slots (ms)=10545
Total time spent by all map tasks (ms)=27460
Total time spent by all reduce tasks (ms)=10545
Total vcore-milliseconds taken by all map tasks=27460 Total
vcore-milliseconds taken by all reduce tasks=10545
Total megabyte-milliseconds taken by all map tasks=28119040
Total megabyte-milliseconds taken by all reduce
tasks=10798080
Map-Reduce Framework
Map input records=66055 Map output records=566308 Map output
14
bytes=5541955
Map output materialized bytes=649694 Input split bytes=115
Combine input records=566308
Combine output records=41991 Reduce input groups=41991 Reduce
shuffle bytes=649694 Reduce input records=41991 Reduce output
records=41991 Spilled Records=83982 Shuffled Maps =1
Failed Shuffles=0 Merged Map outputs=1
GC time elapsed (ms)=210 CPU time spent (ms)=6020
Physical memory (bytes) snapshot=412577792 Virtual memory
(bytes) snapshot=3924443136 Total committed heap usage
(bytes)=284688384
Shuffle Errors
BAD_ID=0 CONNECTION=0 IO_ERROR=0 WRONG_LENGTH=0 WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=3359550 File Output Format Counters
Bytes Written=487290
On peut lire maintenant le fichier. Le contenu est une liste de mots avec
le nombre d’occurrences pour chaque mot.
Pour supprimer les fichiers se trouvant sur HDFS, il faut exécuter:
hdfs dfs -rm -R /user/hduser/output hdfs dfs -rm -R /user/hduser/input
stopping datanode
16