Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Corso di Sistemi Operativi Avanzati 2014/2015
- Prof. Cattaneo Giuseppe
- Dr. Roscigno Gianluca
- PARTE 1 – Configurazione di un singolo nodo (pseudo-distributed) – Hadoop v2.5.1
- Intro
- In questa guida vedremo come installare e configurare Hadoop in maniera molto semplice. Nella prima parte vedremo come creare un singolo nodo che funzionerà sia da master che da slave (appunto pseudo-distributed). Nella seconda parte invece vedremo come configurare un nodo principale (master) e una serie di nodi su cui verrà distribuito il lavoro (slave).
- Gli step di questa guida sono stati eseguiti su Ubuntu 14.04.01 LTS 64bit con Hadoop 2.5.1 e Java 8 u20 virtualizzato attraverso VMPlayer settato con 3100 MB di RAM.
- L’username è user, la password è admin. L’hostname di tale macchina è “ubuntu”.
- Per modificare l’hostname: sudo nano /etc/hostname.
- Per salvare: ctrl+O
- Prima di tutto occorre aggiornare il sistema:
- 1. $ sudo apt-get update
- 2. $ sudo apt-get upgrade
- Installazione di Java
- Aggiungiamo i repository per l’ultima versione di Java:
- 1. $ sudo add-apt-repository ppa:webupd8team/java
- 2. $ sudo apt-get update
- 3. $ sudo apt-get install oracle-java8-installer
- Controlliamo se l’installazione è andata a buon fine scrivendo nella console:
- 1. $ java -version
- L’output dovrebbe essere simile a quello sotto:
- 1. java version "1.8.0_20"
- 2. Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
- 3. Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)
- Installazione di SSH
- Secure Shell è un protocollo di rete che permette di stabilire una sessione remota cifrata tramite interfaccia a riga di comando con un altro host di una rete.
- Se SSH non è stato installato procedere con l’installazione scrivendo nella console:
- 1. $ sudo apt-get install ssh
- Gruppo dedicato per Hadoop
- Bisogna creare un utente dedicato per Hadoop:
- 1. $ sudo addgroup hadoop
- 2. $ sudo adduser user hadoop
- Creazione delle chiavi SSH
- SSH utilizza la crittografia asimmetrica (RSA). È generata una coppia di chiavi pubblica/privata. La chiave pubblica è memorizzata sul server, la chiave privata deve essere conservata dall’utente (con una password).
- 1. user@ubuntu:~$ ssh-keygen -t rsa -P “”
- L’output sarà qualcosa come quello qui sotto:
- 1. Generating public/private rsa key pair.
- 2. Enter file in which to save the key (/home/user/.ssh/id_rsa):
- 3. Created directory '/home/user/.ssh'.
- 4. Your identification has been saved in /home/user/.ssh/id_rsa.
- 5. Your public key has been saved in /home/user/.ssh/id_rsa.pub.
- 6. The key fingerprint is:
- 7. 9b:9f:eb:4a:56:f7:d0:87:60:d5:e0:dd:77:a0:19:5d user@ubuntu
- 8. The key's randomart image is:
- 9. +--[ RSA 2048]----+
- 10. …
- Bisogna abilitare l’accesso a SSH inserendo correttamente la chiave appena generata tra le chiavi autorizzate:
- 1. user@ubuntu:~$ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
- Adesso bisogna testare se la connessione ssh funziona:
- 1. user@ubuntu:~$ ssh localhost
- 2. The authenticity of host 'localhost (::1)' can't be established.
- 3. RSA key fingerprint is d7:87:25:47:ae:02:00:eb:1d:75:4f:bb:44:f9:36:26.
- 4. Are you sure you want to continue connecting (yes/no)? yes
- Se la connessione avviene senza alcun problema, allora non sarà restituito alcun errore, quindi possiamo scrivere exit nella console e continuare con l’installazione. Altrimenti, nel caso ci fossero errori, si può vedere in dettaglio cosa succede scrivendo nella console: ssh -vvv localhost.
- Installazione di Hadoop 2.5.1
- Adesso possiamo passare all’installazione e alla configurazione di Hadoop:
- 1. user@ubuntu:~$ wget http://mirror.nohup.it/apache/hadoop/common/hadoop-2.5.1/hadoop-2.5.1-src.tar.gz
- 2. user@ubuntu:~$ sudo tar -zxvf hadoop-2.5.1.tar.gz
- 3. user@ubuntu:~$ sudo mv hadoop-2.5.1 hadoop
- 4. user@ubuntu:~$ sudo mv hadoop /usr/local
- 5. user@ubuntu:~$ cd /usr/local
- 6. user@ubuntu:~$ sudo chown -R user:hadoop hadoop
- Modifica $HOME/.bashrc
- Modifichiamo il file bashrc per gli utenti che vogliono utilizzare Hadoop (per esempio l’utente user), aggiungendo quello scritto in rosso di seguito. Si tratta delle variabili d’ambiente di HADOOP e JAVA_HOME.
- IMPORTANTE: fare attenzione al path evidenziato in rosso:
- 1. $cd~
- 2. $nano .bashrc
- 3. #Hadoop variables
- 4. export HADOOP_HOME=/usr/local/hadoop
- 5. export HADOOP_INSTALL=/usr/local/hadoop
- 6. export PATH=$PATH:$HADOOP_INSTALL/bin
- 7. export PATH=$PATH:$HADOOP_INSTALL/sbin
- 8. export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
- 9. export HADOOP_COMMON_HOME=$HADOOP_INSTALL
- 10. export HADOOP_HDFS_HOME=$HADOOP_INSTALL
- 11. export YARN_HOME=$HADOOP_INSTALL
- 12. # Set JAVA_HOME (we will also configure JAVA_HOME directly for Hadoop later on)
- 13. export JAVA_HOME=/usr/lib/jvm/java-8-oracle
- 14. # Some convenient aliases and functions for running Hadoop-related commands
- 15. unalias fs &> /dev/null
- 16. alias fs="hadoop fs"
- 17. unalias hls &> /dev/null
- 18. alias hls="fs -ls"
- 19. # If you have LZO compression enabled in your Hadoop cluster and
- 20. # compress job outputs with LZOP (not covered in this tutorial):
- 21. # Conveniently inspect an LZOP compressed file from the command
- 22. # line; run via:
- 23. #
- 24. # $ lzohead /hdfs/path/to/lzop/compressed/file.lzo
- 25. #
- 26. # Requires installed 'lzop' command.
- 27. #
- 28. lzohead () {
- 29. hadoop fs -cat $1 | lzop -dc | head -1000 | less
- 30. }
- Fare re-loging in Ubuntu utilizzando user e verificare la versione di hadoop:
- 1. hadoop version
- Se l’output indicherà che la versione è la 2.5.1, allora tutto è andato a buon fine.
- 1. Hadoop 2.5.1
- 2. Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r
- 3. Compiled by jenkins on 2014-09-05T23:11Z
- 4. Compiled with protoc 2.5.0
- 5. From source with checksum 6424fcab95bfff8337780a181ad7c78
- 6. This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.5.1.jar
- Andiamo a modificare i file di configurazione di Hadoop.
- Modifichiamo il file hadoop-env.sh:
- 1. user@ubuntu: ~$ cd /usr/local/hadoop
- 2. user@ubuntu:~$ nano etc/hadoop/hadoop-env.sh
- Nel file hadoop-env.sh si deve modificare il path di Java. Quindi cercare la stringa:
- 1. # The java implementation to use. Required.
- 2. # export JAVA_HOME=${JAVA_HOME}
- e sostituirla con (ancora una volta, fare attenzione al path di java):
- 1. # The java implementation to use. Required.
- 2. export JAVA_HOME=/usr/lib/jvm/java-8-oracle/
- Aggiungere le seguenti variabili d’ambiente:
- 1. export HADOOP_COMMON_LIB_NATIVE_DIR=“/usr/local/hadoop/lib/native”
- 2. export HADOOP_OPTS =“-Djava.library.path=/usr/local/hadoop/lib/native”
- Salviamo il file premendo CTRL+O, premere invio per sovrascrivere il file e usciamo da nano premendo CTRL+X.
- Creiamo le cartelle:
- 1. cd ~
- 2. mkdir –m 755 mydata
- 3. mkdir –m 755 mydata/hdfs
- 4. mkdir –m 755 mydata/hdfs/namenode
- 5. mkdir –m 755 mydata/hdfs/datanode
- Ora non ci resta che aggiungere localhost nel file hosts.
- 1. user@ubuntu:~$ sudo nano /etc/hosts
- Aggiungere:
- 1. 127.0.0.1 ubuntu
- 2. 127.0.0.1 localhost
- 3. 127.0.1.1 ubuntu
- 4. 127.0.1.1 localhost
- Ctrl+O per salvare Ctrl+X per chiudere.
- Modifica dei file *.xml
- Il file core-site.xml [sito] gestisce anche le impostazioni del NameNode. Sempre con l’account user apriamo il file:
- 1. user@ubuntu:~$ cd /usr/local/hadoop/etc/hadoop
- 2. user@ubuntu:~$ nano core-site.xml
- e lo modifichiamo nel modo seguente (fare copia e incolla):
- 1. <property>
- 2. <name>fs.default.name</name>
- 3. <value>hdfs://localhost:9000</value>
- 4. <description>A base for other temporary directories.</description>
- 5. </property>
- 6.
- 7. <description>The name of the default file system. A URI whose
- 8. scheme and authority determine the FileSystem implementation. The
- 9. uri's scheme determines the config property (fs.SCHEME.impl) naming
- 10. the FileSystem implementation class. The uri's authority is used to
- 11. determine the host, port, etc. for a filesystem.</description>
- Poi modifichiamo anche yarn-site.xml [sito]
- 1. <property>
- 2. <name>yarn.nodemanager.aux-services</name>
- 3. <value>mapreduce_shuffle</value>
- 4. </property>
- 5. <property>
- 6. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
- 7. <value>org.apache.hadoop.mpred.ShuffleHandler</value>
- 8. </property>
- 9. <property>
- 10. <name>yarn.resourcemanager.address</name>
- 11. <value>localhost:8032</value>
- 12. </property>
- 13. <property>
- 14. <name>yarn.resourcemanager.scheduler.address</name>
- 15. <value>localhost:8030</value>
- 16. </property>
- 17. <property>
- 18. <name>yarn.resourcemanager.resource-tracker.address</name>
- 19. <value>localhost:8031</value>
- 20. </property>
- 21. <property>
- 22. <name>yarn.resourcemanager.admin.address</name>
- 23. <value>localhost:8033</value>
- 24. </property>
- 25. <property>
- 26. <name>yarn.resourcemanager.webapp.address</name>
- 27. <value>localhost:8088</value>
- 28. </property>
- 29. <property>
- 30. <name>mapreduce.jobhistory.webapp.address</name>
- 31. <value>localhost:19888</value>
- 32. </property>
- 33. <property>
- 34. <name> mapreduce.jobhistory.address</name>
- 35. <value>localhost:10020</value>
- 36. </property>
- Spostiamo il file mapred-site.xml.template in mapred-site.xml [sito] e modifichiamolo:
- 1. cp mapred-site.xml.template mapred-site.xml
- 2. nano mapred-site.xml
- 3. <configuration>
- 4. <property>
- 5. <name>mapreduce.framework.name</name>
- 6. <value>yarn</value>
- 7. </property>
- File hdfs-site.xml [sito]:
- 1. <property>
- 2. <name>dfs.replication</name>
- 3. <value>1</value>
- 4. </property>
- 5. <property>
- 6. <name>dfs.namenode.name.dir</name>
- 7. <value>file:/home/user/mydata/hdfs/namenode</value>
- 8. </property>
- 9. <property>
- 10. <name>dfs.datanode.data.dir</name>
- 11. <value>file:/home/user/mydata/hdfs/datanode</value>
- 12. </property>
- Start Hadoop 2.5.1
- Prima di avviare Hadoop bisogna cancellare le cartelle namenode e datanode e formattare eventualmente il file system:
- Formattiamo l’HDFS:
- 1. user@ubuntu: formattahdfs.sh
- L’output della formattazione dovrebbe essere una cosa simile:
- 1. user@ubuntu:/usr/local/hadoop$ hdfs namenode -format
- 2. 14/10/10 18:59:57 INFO common.Storage: Storage directory /home/user/mydata/hdfs/namenode has been successfully formatted.
- 3. 14/10/10 18:59:57 INFO namenode.NameNode: SHUTDOWN_MSG:
- 4. user@ubuntu:/usr/local/hadoop$
- Se tutto va bene (come vediamo sopra been successfully formatted), dobbiamo avviare i seguenti servizi: Yarn, dfs, historyserver.
- 1. start-yarn.sh
- 2. start-dfs.sh
- 3. mr-jobhistory-daemon.sh start historyserver
- Per vedere se tutti i servizi sono partiti scriviamo:
- 1. user@ubuntu:~$ jps
- Se tutto sarà andato bene vedremo i seguenti servizi attivi:
- 1. 2287 ResourceManager
- 2. 1938 NodeManager
- 3. 2456 JobHistoryServer
- 4. 2085 SecondaryNameNode
- 5. 2349 Jps
- 6. 1788 NameNode
- 7. 2340 DataNode
- Nel caso in cui uno dei servizi non sia stato avviato, allora bisogna indagare e vedere nei file di log (*.log) presenti nella directory logs di hadoop.
- Ovviamente per terminare i servizi e chiudere Hadoop basta lanciare:
- 1. stop-yarn.sh;
- 2. stop-dfs.sh;
- 3. mr-jobhistory-daemon.sh stop historyserver;
- Proviamo il Map-Reduce
- Per provare il corretto funzionamento della nostra installazione, eseguiamo WordCount incluso come esempio in Hadoop. Scarichiamo prima i file di testo in formato testuale e salvarlo sulla Scrivania in una cartella INPUT:
- 1. http://www.gutenberg.org/cache/epub/47120/pg47120.txt
- Avviamo la nostra infrastruttura, dopo ciò copiamo il file nel HDFS:
- 1. $ hdfs dfs -copyFromLocal /home/user/Scrivania/INPUT INPUT
- ed eseguiamo WordCount:
- 1. $ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.1.jar wordcount INPUT OUTPUT
- Ad esecuzione terminata, possiamo copiare il file di output sul filesystem locale:
- 1. $ hdfs dfs -getmerge /user/user/OUTPUT OUTPUT
- Oppure andando accedendo al pannello web nella sezione Browse the filesystem.
- Script
- • startAll.sh – avvio dei servizi: yarn, dfs, jobhistory (se sono già avviati li interrompe)
- • stopAll.sh – terminazione dei servizi: yarn, dfs, jobhistory
- • formattahdfs.sh – ripristino, formattazione HDFS e avvio di Hadoop
- • HadoopVersion.sh – mostra la versione corrente di Hadoop
- • formattaAndStart.sh – formatta l’HDFS e avvia i servizi
- • stopJob.sh: ferma uno specifico job
- • executeWordCount.sh – esecuzione di WordCount
- VM for Pseudo Distributed Hadoop 2.5.1
- Tale VM può essere scaricata dai seguenti URL:
- http://goo.gl/bOktc8
- WordCount Source Code
- Eclipse workspace: download
- PARTE 2 – Configurazione di un cluster (distributed) – Hadoop v2.5.1
- Intro
- Con la seconda parte di questa guida, vedremo come configurare un cluster di nodi Hadoop e in seguito come mandare in esecuzione un job.
- IMPORTANTE: prima di continuare con questa guida, bisogna aver seguito i passaggi della prima parte.
- In questa guida sarà creato un cluster con due nodi; creeremo quindi un master e uno slave come esempio. Prendiamo quindi il nodo creato in precedenza (pseudo-distribuded) e configuriamolo passo-passo per creare un cluster.
- Configurazione della rete
- Supponiamo di lavorare in una rete con IP 192.168.5.61/252. Possiamo assegnare un nome che identifica il nodo all’interno del cluster. Andiamo a modificare quindi il file hosts:
- 1. $ sudo nano /etc/hosts
- e modifichiamo il file nel modo seguente:
- 1. $ 192.168.5.61 master
- 2. $ 192.168.5.62 slave
- Nel file hosts andremo ad inserire tutti i nodi che faranno parte del cluster. Adesso andiamo a modificare l’hostname (che nella prima parte si chiamava ubuntu) in master e slave così da non creare confusione.
- IMPORTANTE: le modifiche fatte nel file hosts devono essere IDENTICHE sia sul master che negli slaves altrimenti potrebbero verificarsi delle anomalie durante l’esecuzione dei job.
- Quindi apriamo il file:
- 1. $ sudo nano /etc/hostname
- e cambiamo l’hostname in master. La stessa cosa deve essere fatta quando creeremo il nodo slave.
- Configurazione del Master
- Sul master, modifichiamo prima il file masters:
- 1. $ cd /usr/local/hadoop/etc/hadoop
- 2. $ nano masters
- scrivendo master. In questo file devono essere inseriti i nomi dei nodi slave che fanno parte del cluster. In un cluster reale vanno inseriti gli hostname di tutti gli slave (senza quello del master).
- ATTENZIONE: il nome del nodo deve essere lo stesso che è inserito nel file hosts altrimenti Hadoop non riuscirà a contattare il nodo.
- 1. $ nano slaves
- scrivendo al suo interno:
- 1. slave1
- 2. slave2
- 3. slave3
- 4. .
- 5. .
- 6. .
- 7. slaveN
- NB: quando si userà lo script personalizzato hadoop-start.sh o hadoop-stop.sh verrà generato automaticamente il file slaves (si veda la fine della guida).
- RACK AWERNESS
- Di solito i grandi cluster di Hadoop sono organizzati in rack, ed il traffico dati tra nodi differenti nello stesso rack è meglio rispetto a quello tra i rack.
- Per usare i rack abbiamo bisogno di un file sh ESEGUIBILE, che ci dice a quale rack appartiene il nodo su cui viene eseguito: rack-topology.sh che a sua volta, legge in un altro file la struttura dei rack: rack_topology.data che è formato in questo modo.
- Rack_topology.data
- 1. Format <host ip> <rack_location>
- 2. 192.168.2.10 01
- 3. 192.168.2.11 02
- 4. 192.168.2.12 03
- Questi file devono essere in /usr/local/hadoop/etc/hadoop/ sia del master che degli slave
- Questi file devono essere usati da Hadoop, e per far ciò bisogna modificare il file core-site.xml (sia nel master che negli slave) ed aggiungere queste proprietà
- 1. <property>
- 2. <name>net.topology.script.file.name</name>
- 3. <value>/etc/hadoop/rack-topology.sh</value>
- 4. </property>
- Fatto ciò si può avviare l’infrastruttura di hadoop. Per vedere se tutto è andato per il verso giusto si può consultare il ResourceManager dal browser: cliccate sui nodi attivi e vedere la colonna Rack se ci da i valori corretti, o anche usare: hadoop dfsadmin –report, per maggiori informazioni consultare questa guida.
- Configurazione globale
- Adesso sia sul master sia sui nodi slave, modifichiamo allo stesso modo i file *-site.xml nel modo seguente (come evidenziato).
- file: core-site.xml: [sito]
- 1. <property>
- 2. <name>fs.default.name</name>
- 3. <value>hdfs://master:9000</value>
- 4. <description>The name of the default file system. A URI whose
- 5. scheme and authority determine the FileSystem implementation. The
- 6. uri's scheme determines the config property (fs.SCHEME.impl) naming
- 7. the FileSystem implementation class. The uri's authority is used to
- 8. determine the host, port, etc. for a filesystem.</description>
- 9. </property>
- 10. <property>
- 11. <name>hadoop.tmp.dir</name>
- 12. <value>/app/hadoop/tmp</value>
- 13. </property>
- File: mapred-site.xml: [sito]
- 1. <property>
- 2. <name>mapreduce.framework.name</name>
- 3. <value>yarn</value>
- 4. </property>
- File: hdfs-site.xml: [sito]
- 1. <property>
- 2. <name>dfs.replication</name>
- 3. <value>3</value>
- 4. <description>Default block replication.
- 5. The actual number of replications can be specified when the file is created.
- 6. The default is used if replication is not specified in create time.
- 7. </description>
- 8. </property>
- Per settare un secondary namenode inserire anche questa proprietà
- 9. <property>
- 10. <name>dfs.namenode.secondary.http-address</name>
- 11. <value>slaveXX:50090</value>
- 12. <description>The secondary namenode http server address and port. </description>
- 13. </property>
- File: yarn-site.xml [sito]
- 1. <property>
- 2. <name>yarn.nodemanager.aux-services</name>
- 3. <value>mapreduce_shuffle</value>
- 4. </property>
- 5. <property>
- 6. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
- 7. <value>org.apache.hadoop.mpred.ShuffleHandler</value>
- 8. </property>
- 9. <property>
- 10. <name>yarn.resourcemanager.address</name>
- 11. <value>master:8032</value>
- 12. </property>
- 13. <property>
- 14. <name>yarn.resourcemanager.scheduler.address</name>
- 15. <value>master:8030</value>
- 16. </property>
- 17. <property>
- 18. <name>yarn.resourcemanager.resource-tracker.address</name>
- 19. <value>master:8031</value>
- 20. </property>
- 21. <property>
- 22. <name>yarn.resourcemanager.admin.address</name>
- 23. <value>master:8033</value>
- 24. </property>
- 25. <property>
- 26. <name>yarn.resourcemanager.webapp.address</name>
- 27. <value>master:8088</value>
- 28. </property>
- 29. <property>
- 30. <name>mapreduce.jobhistory.webapp.address</name>
- 31. <value>master:19888</value>
- 32. </property>
- 33. <property>
- 34. <name>mapreduce.jobhistory.address</name>
- 35. <value>master:10020</value>
- 36. </property>
- 37. <property>
- 38. <name>yarn.nodemanager.resource.memory-mb</name> <!-- indica la memoria messa a disposizione dal nodo, per info vedere il capitolo sul “Memory Model”-->
- 39. <value>2048</value>
- 40. </property>
- Installazione NTP
- Per sincronizzare l’orario degli slave con quello del master bisogna utilizzare un server NTP. Nel nostro caso abbiamo necessità di creare un nuovo server NTP a causa del firewall della rete.
- Prima di tutto, installare il server sul master.
- sudo apt-get install ntp
- Poi bisogna modificare il file “/etc/ntp.conf” in modo da far prendere l’orario di sistema del master stesso.
- Aggiungere le seguenti due linee:
- server 127.127.1.0 # è un alias di localhost
- fudge 127.127.1.0 stratum 10
- Poi, commentare gli altri server con cancelletto.
- Una volta effettuate le modifiche riavviare il server (nb: si auto-avvia all’accensione)
- sudo service ntp restart
- A questo punto dagli slave effettuare “sudo ntpdate master” per sincronizzare o eseguire lo script sincronizza Ora.sh.
- Avvio di un job
- Prima di avviare un job, ricordarsi di cancellare, creare e formattare le cartelle HDFS su tutti i nodi (incluso il master).
- Avviamo il Namenode sul master e il Datanode sugli slaves:
- 1. user@master:/usr/local/hadoop$ start-dfs.sh
- Se i servizi si sono attivati correttamente vedremo una cosa simile, scrivendo il comando jps sul master:
- 1. user@master:/usr/local/hadoop$ jps
- 2. 14799 NameNode
- 3. 15314 Jps
- 4. 14977 SecondaryNameNode
- 5. user@master:/usr/local/hadoop$
- Se lo scriviamo sugli slaves vedremo una cosa simile:
- 1. user@slave:/usr/local/hadoop$ jps
- 2. 15183 DataNode
- 3. 15616 Jps
- 4. user@slave:/usr/local/hadoop$
- Adesso, sempre sul master, avviamo i demoni del framework YARN e dell’ historyserver:
- 1. user@master:/usr/local/hadoop$ start-yarn.sh
- 2. user@master:/usr/local/hadoop$ mr-jobhistory-daemon.sh start historyserver
- Ancora una volta, se tutto andrà bene, con il comando jps vedremo nel master i seguenti servizi attivi:
- 1. user@master:/usr/local/hadoop$ jps
- 2. 14799 NameNode
- 3. 15314 Jps
- 4. 14977 SecondaryNameNode
- 5. 14978 ResourceManager
- 6. 14979 JobHistoryService
- 7. user@master:/usr/local/hadoop$
- e negli slave:
- 1. user@slave:/usr/local/hadoop$ jps
- 2. 15183 DataNode
- 3. 15897 NodeManager
- 4. 16284 Jps
- Per controllare i servizi è possibile usufruire dell’interfaccia web. Nelle VM da noi distribuite, in Firefox sono presenti i segnalibri alle pagine.
- Servizio URL
- ResourceManager http://master:8088/
- NameNode http:// master:50070/dfshealth.jsp
- Namenode information http:// master:50070/dfshealth.html
- Browsing HDFS http:// master:50070/explorer.html
- MR Job History Server http:// master:19888/jobhistory
- SecondaryNameNode http:// master: 50090/status
- NodeManager http://slave:8042/node
- Memory model
- Node Manager
- Il Node Manager alloca i container che eseguono i task di Map e Reduce: la somma di tutti i container non può superare le soglie di configurazione e il NodeManager non allocherà un container se non c’è abbastanza memoria.
- Nel Node Manager il limite di allocazione è configurabile:
- Impostare yarn.nodemanager.resource.memory-mb in yarn-site.xml: di default è 8192 MB e si configura una sola volta allo startup del frame work.
- Memoria del task
- Bisogna controllare il limite della memoria di ogni Job: il limite fisico che map e reduce possono allocare e il limite fisico di memoria utilizzabile deve essere inferiore a quello configurato in:
- Container Memory Usage = JVM Heap Size + JVM Perm Gen + Native Libraries + Memory used by spawned processes
- Un Task viene terminato se supera il limite di memoria.
- Le proprietà specificate per i job:
- • mapreduce.map.memory.mb property for map tasks
- • mapreduce.reduce.memory.mb property for reduce tasks
- • Di default la memoria è impostata a 1024
- Scheduler
- Alcuni scheduler forzano i valori massimo e minimo per l’allocazione della memoria, lo scheduler ha un valore minimo e massimo per l’allocazione del container, l’incremento è fatto ogni volta aggiungendo una costate ‘valore_minimo’.
- Lo scheduler consente una richiesta tra 1024 e 10240 MB per task, con incrementi di 1024 per volta e può essere modificato tramite il file di properties yarn-site.xml
- o yarn.scheduler.capacity.minimum-allocation-mb
- o yarn.scheduler.capacity.maximum-allocation-mb
- JVM Heap
- Ricorda che i limiti per i containers di map e reduce possono essere modificati con mapreduce.map.memory.mb e mapreduce.reduce.memory.mb
- La grandezza del JVM heap può essere modificata settando:
- • Mapreduce.reduce.java.opts
- • Mapreduce.map.java.opts
- La memoria utilizzata dal container è formata da: JVM Heap Size + JVM Perm Gen + Native Libraries + memoria usata dal processo generato: mapreduce.map.java.opts=-Xmx2G
- Virtual Memory
- • L’allocazione di memoria virtuale è limitata dal Node Manager
- o Un task è terminato se supera la memoria virtuale che gli è concessa
- • E’ configurata in base alla memoria fisica
- o Di default, è 2.1 della memoria fisica del container.
- • Es: se un container è configurato a 1G di memoria fisica non potrà superare i 2.1G di memoria virtuale
- o Modificare tramite la proprietà yarn.nodemanager.vmem-pmem-ratio del file yarn-site.xml
- o Configurato allo start-up.
- Esempio del Memory Model
- Supponiamo di voler configurare l’heap del Map task a 512MB ed per il reduce a 1G, possiamo configurare la grandezza dell’Heap dei Job Client, con queste proprietà:
- o mapreduce.map.java.opts=-Xmx512
- o mapreduce.reduce.java.opts=-Xmx1G #Per il limite del container, assumi ulteriori 512MB ulteriori alla grandezza di Heap richiesta
- o mapreduce.map.memory.mb=1024
- o mapreduce.reduce.memory.mb=1536
- Configuarazione del YARN NodeManager (yarn-site.xml)
- • 10 Gigs per il NodeManager => 10 mappers o 6 reducers (o qualche combinazione): yarn.nodemanager.resource.memory-mb=10240
- • Modificare la proprietà dello Scheduler per consentire un’allocazione ad incrementi di 512M : yarn.scheduler.capacity.minimum-allocation-mb=512
- • Limite della memoria virtual = 2.1 della memoria fisica configurata
- o 2150.4MB per i Map tasks
- o 3225.6MB per i Reduce tasks
- Script
- Sul master nella cartella script, ci sono una serie di script che sono stati scritti appositamente per semplificare alcune azioni noiose (per eseguirli: $./nomescript.sh):
- ● hadoop-start.sh $start $end: avvia hadoop dallo slave “start” allo slave “end”.
- ● hadoop-stop.sh $start $end: ferma hadoop.
- ● hadoop-restart.sh $start $stop: riavvia hadoop.
- ● formattahdfs.sh $start $stop: per pulire e formattare l’intero file system di Hadoop. Può essere usato quando si avvia un nuovo progetto o quando si verificano errori nel file system. Ovviamente, tutto il lavoro svolto andrà perso.
- ● pingall.sh $start $stop: verifica che tutti i nodi della griglia siano online.
- ● updateCoreSite.sh $start $stop: sostituisce il file core-site.xml su tutti gli slaves della griglia con quello modificato nella cartella insieme agli script.
- ● updateHdfsSite.sh $start $stop $fattoreReplica $dimensioniBlocco: sostituisce il file hdfs-site.xml su tutti gli slaves della griglia con uno generato automaticamente
- ● updateMapRedSite.sh $start $stop: sostituisce il file mapred-site.xml su tutti gli slaves della griglia con quello modificato nella cartella insieme agli script (per modificare parametri secondari).
- ● updateYarnSite.sh $start $stop: invia l’update a tutti gli slave del file yarn-site.xml
- ● restartAll.sh $start $stop: riavvia tutti gli slaves e il master
- ● restartSlaves.sh $start $stop: riavvia tutti gli slaves
- ● shutdown.sh $start $stop: arresta tutti gli slaves.
- ● countall.sh $start $stop: restituisce il numero di slave attivi e quali slave non attivi
- ● arresta.sh $n-slave: arresta lo specifico slave preso in input
- ● stopJob.sh $n-slave: ferma uno specifico job
- ● SincronizzaOra.sh $start $stop: per sincronizzare gli orari degli slave con quelli del master.
- Gli script del master si trovano all’URL: http://goo.gl/EXdCCs
- Download
- Macchina Master: download
- Macchina Slave: download
- Note per i laboratori
- IMPORTANTE: prima di iniziare a lavorare, avviare tutte le macchine con Windows e loggarsi con l’account:
- user: RETI-xx\hadoop2 o SISTEMI-xx\hadoop2
- pass: sisop2
- dove xx è il numero della macchina di laboratorio.
- La macchina virtuale partirà in automatico e non bisognerà loggarsi (tranne cause sconosciute). Controllare comunque se ogni macchina virtuale si avvia correttamente.
- Se la macchina virtuale da qualche errore e non è ripristinabile, sul desktop vi è uno zip di backup, basta scompattarlo sul desktop, ed avrete una vm funzionante.
- Procedura d’installazione sui PC
- Per l’installazione delle virtual machine con l’infrastruttura Hadoop , è consigliato utilizzare un account di laboratorio ad hoc, in modo da potere effettuare al meglio e nel modo più semplice possibile i test.
- Prima di copiare la VM Slave sulla macchina slaveX effettuare i seguenti passi:
- • Loggarsi con l’account creato per Hadoop
- • Impostare l’interfaccia classica di Windows
- • Disabilitare Update vmware (Ctrl+D sul player; disabilitare tutto)
- • Disabilitare sospensione macchina
- • Disabilitare spegnimento monitor
- • Copiare VM Slave sul desktop
- • Estrarre la VM
- • Cancellare file compresso
- • Mettere la VM in Startup (menù “start” di windows)
- • Avviare la VM
- • Modificare hostname: sudo nano /etc/hostname
- • Modificare le ultime cifre dell’indirizzo IP (Indirizzi IP allocati per Hadoop: 192.168.5.61 - 192.168.5.160, si veda la tabella alla fine della guida)
- o IP: 192.168.5.XX
- o MASK: 255.255.252.0
- o GATEWAY: 192.168.7.254
- o DNS: 193.205.160.3
- • Riavviare VM
- • Spegnere VM
- • Comprimere la VM e salvarla sul desktop
- • Effettuare il login con ssh dal master.
- • Dal master lanciare “./arresta.sh slaveX” e vedere se lo slaveX si arresta correttamente.
- In questo modo basterà loggarsi nell’account creato ad hoc, e la virtual machine si avvierà automaticamente senza dover far altro.
- PC-Name Hostname Indirizzo IP Laboratorio Stato
- 01 = Sistemi OK / KO
- 02 = Reti
- SISTEMI-02 slave1 192.168.5.62 1
- SISTEMI-03 slave2 192.168.5.63 1
- SISTEMI-04 slave3 192.168.5.64 1
- SISTEMI-05 slave4 192.168.5.65 1
- SISTEMI-06 slave5 192.168.5.66 1
- SISTEMI-07 slave6 192.168.5.67 1
- SISTEMI-08 slave7 192.168.5.68 1
- SISTEMI-09 slave8 192.168.5.69 1
- SISTEMI-10 slave9 192.168.5.70 1
- SISTEMI-11 slave10 192.168.5.71 1
- SISTEMI-12 slave11 192.168.5.72 1
- SISTEMI-13 slave12 192.168.5.73 1
- SISTEMI-14 slave13 192.168.5.74 1
- SISTEMI-15 slave14 192.168.5.75 1
- SISTEMI-16 slave15 192.168.5.76 1
- SISTEMI-17 slave16 192.168.5.77 1
- SISTEMI-18 slave17 192.168.5.78 1
- SISTEMI-19 slave18 192.168.5.79 1
- SISTEMI-20 slave19 192.168.5.80 1
- SISTEMI-21 slave20 192.168.5.81 1
- SISTEMI-22 slave21 192.168.5.82 1
- SISTEMI-23 slave22 192.168.5.83 1
- SISTEMI-24 slave23 192.168.5.84 1
- SISTEMI-25 slave24 192.168.5.85 1
- SISTEMI-26 slave25 192.168.5.86 1
- SISTEMI-27 slave26 192.168.5.87 1
- SISTEMI-28 slave27 192.168.5.88 1
- SISTEMI-29 slave28 192.168.5.89 1
- SISTEMI-30 slave29 192.168.5.90 1
- SISTEMI-31 slave30 192.168.5.91 1
- SISTEMI-32 slave31 192.168.5.92 1
- SISTEMI-33 slave32 192.168.5.93 1
- SISTEMI-34 slave33 192.168.5.94 1
- SISTEMI-35 slave34 192.168.5.95 1
- SISTEMI-36 slave35 192.168.5.96 1
- SISTEMI-37 slave36 192.168.5.97 1
- SISTEMI-38 slave37 192.168.5.98 1
- SISTEMI-39 slave38 192.168.5.99 1
- SISTEMI-40 slave39 192.168.5.100 1
- SISTEMI-41 slave40 192.168.5.101 1
- SISTEMI-42 slave41 192.168.5.102 1
- SISTEMI-43 slave42 192.168.5.103 1
- SISTEMI-44 slave43 192.168.5.104 1
- SISTEMI-45 slave44 192.168.5.105 1
- SISTEMI-46 slave45 192.168.5.106 1
- SISTEMI-47 slave46 192.168.5.107 1
- SISTEMI-48 slave47 192.168.5.108 1
- SISTEMI-49 slave48 192.168.5.109 1
- SISTEMI-50 slave49 192.168.5.110 1
- PC-Name Hostname Indirizzo IP Laboratorio Stato
- 01 = Sistemi OK / KO
- 02 = Reti
- RETI-01 slave50 192.168.5.111 2
- RETI-02 slave51 192.168.5.112 2
- RETI-03 slave52 192.168.5.113 2
- RETI-04 slave53 192.168.5.114 2
- RETI-05 slave54 192.168.5.115 2
- RETI-06 slave55 192.168.5.116 2
- RETI-07 slave56 192.168.5.117 2
- RETI-08 slave57 192.168.5.118 2
- RETI-09 slave58 192.168.5.119 2
- RETI-10 slave59 192.168.5.120 2
- RETI-11 slave60 192.168.5.121 2
- RETI-12 slave61 192.168.5.122 2
- RETI-13 slave62 192.168.5.123 2
- RETI-14 slave63 192.168.5.124 2
- RETI-15 slave64 192.168.5.125 2
- RETI-16 slave65 192.168.5.126 2
- RETI-17 slave66 192.168.5.127 2
- RETI-18 slave67 192.168.5.128 2
- RETI-19 slave68 192.168.5.129 2
- RETI-20 slave69 192.168.5.130 2
- RETI-21 slave70 192.168.5.131 2
- RETI-22 slave71 192.168.5.132 2
- RETI-23 slave72 192.168.5.133 2
- RETI-24 slave73 192.168.5.134 2
- RETI-25 slave74 192.168.5.135 2
- RETI-26 slave75 192.168.5.136 2
- RETI-27 slave76 192.168.5.137 2
- RETI-28 slave77 192.168.5.138 2
- RETI-29 slave78 192.168.5.139 2
- RETI-30 slave79 192.168.5.140 2
- RETI-31 slave80 192.168.5.141 2
- RETI-32 slave81 192.168.5.142 2
- RETI-33 slave82 192.168.5.143 2
- RETI-34 slave83 192.168.5.144 2
- RETI-35 slave84 192.168.5.145 2
- RETI-36 slave85 192.168.5.146 2
- RETI-37 slave86 192.168.5.147 2
- RETI-38 slave87 192.168.5.148 2
- RETI-39 slave88 192.168.5.149 2
- RETI-40 slave89 192.168.5.150 2
- RETI-41 slave90 192.168.5.151 2
- RETI-42 slave91 192.168.5.152 2
- RETI-43 slave92 192.168.5.153 2
- RETI-44 slave93 192.168.5.154 2
- RETI-45 slave94 192.168.5.155 2
- RETI-46 slave95 192.168.5.156 2
- RETI-47 slave96 192.168.5.157 2
- RETI-48 slave97 192.168.5.158 2
- RETI-49 slave98 192.168.5.159 2
- RETI-50 slave99 192.168.5.160 2
- Mappa del Cluster (Laboratorio RETI)
- INGRESSO
- RETI-50 SLAVE 99 5.160 RETI-49 SLAVE 98 5.159 RETI-48 SLAVE 97 5.158 RETI-47 SLAVE 96 5.157 RETI-46 SLAVE 95 5.156 RETI-45 SLAVE 94 5.155 RETI-44 SLAVE 93 5.154 RETI-43 SLAVE 92 5.153 RETI-42 SLAVE 91 5.152 RETI-41 SLAVE 90 5.151 RETI-40 SLAVE 89 5.150
- RETI-39 SLAVE 88 5.149 RETI-38 SLAVE 87 5.148 RETI-37 SLAVE 86 5.147 RETI-36 SLAVE 85 5.146 RETI-35 SLAVE 84 5.145 RETI-34 SLAVE 83 5.144 RETI-33 SLAVE 82 5.143 RETI-32 SLAVE 81 5.142 RETI-31 SLAVE 80 5.141 RETI-30 SLAVE 79 5.140 RETI-29 SLAVE 78 5.139
- RETI-28 SLAVE 77 5.138 RETI-27 SLAVE 76 5.137 RETI-26 SLAVE 75 5.136 RETI-25 SLAVE 74 5.135 RETI-24 SLAVE 73 5.134 RETI-23 SLAVE 72 5.133 RETI-22 SLAVE 71 5.132 RETI-21 SLAVE 70 5.131 RETI-20 SLAVE 69 5.130 RETI-19 SLAVE 68 5.129 RETI-18 SLAVE 67 5.128 RETI-17 SLAVE 66 5.127 RETI-16 SLAVE 65 5.126 RETI-15 SLAVE 64 5.125
- RETI-14 SLAVE 63 MASTER 5.124 RETI-13 SLAVE 62 5.123 RETI-12 SLAVE 61 5.122 RETI-11 SLAVE 60 5.121 RETI-10 SLAVE 59 5.120 RETI-09 SLAVE 58 5.119 RETI-08 SLAVE 57 5.118 RETI-07 SLAVE 56 5.117 RETI-06 SLAVE 55 5.116 RETI-05 SLAVE 54 5.115 RETI-04 SLAVE 53 5.114 RETI-03 SLAVE 52 5.113 RETI-02 SLAVE 51 5.112 RETI-01 SLAVE 50 5.111
- In rosso: i pc non funzionanti.
- Mappa del Cluster (Laboratorio SISTEMI)
- INGRESSO
- SISTEMI-13 SLAVE 12 5.73 SISTEMI-12 SLAVE 11 5.72 SISTEMI-11 SLAVE 10 5.71 SISTEMI-10 SLAVE 9 5.70 SISTEMI-09 SLAVE 8 5.69 SISTEMI-08 SLAVE 7 5.68 SISTEMI-07 SLAVE 6 5.67 SISTEMI-06 SLAVE 5 5.66 SISTEMI-05 SLAVE 4 5.65 SISTEMI-04 SLAVE 3 5.64 SISTEMI-03 SLAVE 2 5.63 SISTEMI-02 SLAVE 1 5.62 SISTEMI-01 MASTER
- SISTEMI-27 SLAVE 26 5.87 SISTEMI-26 SLAVE 25 5.86 SISTEMI-25 SLAVE 24 5.85 SISTEMI-24 SLAVE 23 5.84 SISTEMI-23 SLAVE 22 5.83 SISTEMI-22 SLAVE 21 5.82 SISTEMI-21 SLAVE 20 5.81 SISTEMI-20 SLAVE 19 5.80 SISTEMI-19 SLAVE 18 5.79 SISTEMI-18 SLAVE 17 5.78 SISTEMI-17 SLAVE 16 5.77 SISTEMI-16 SLAVE 15 5.76 SISTEMI-15 SLAVE 14 5.75 SISTEMI-14 SLAVE 13 5.74
- SISTEMI-41 SLAVE 40 5.101 SISTEMI-40 SLAVE 39 5.100 SISTEMI-39 SLAVE 38 5.99 SISTEMI-38 SLAVE 37 5.98 SISTEMI-37 SLAVE 36 5.97 SISTEMI-36 SLAVE 35 5.96 SISTEMI-35 SLAVE 34 5.95 SISTEMI-34 SLAVE 33 5.94 SISTEMI-33 SLAVE 32 5.93 SISTEMI-32 SLAVE 31 5.92 SISTEMI-31 SLAVE 30 5.91 SISTEMI-30 SLAVE 29 5.90 SISTEMI-29 SLAVE 28 5.89 SISTEMI-28 SLAVE 27 5.88
- SISTEMI-50 SLAVE 49 5.110 SISTEMI-49 SLAVE 48 5.109 SISTEMI-48 SLAVE 47 5.108 SISTEMI-47 SLAVE 46 5.107 SISTEMI-46 SLAVE 45 5.106 SISTEMI-45 SLAVE 44 5.105 SISTEMI-44 SLAVE 43 5.104 SISTEMI-43 SLAVE 42 5.103 SISTEMI-42 SLAVE 41 5.102
- In rosso: i pc non funzionanti.
- La guida dell’ anno precedente è disponibile al seguente link: https://mega.co.nz/#!gk9hELiC!eJlP584FZdqDOsJcG9NWd0p8CPrg687ClPoUkvFAL3c
- Autori
- Giuseppe Luciano
- Ciro Veneruso
- Ciro Amati
- Stefania Cardamone
- Alessio Petrozziello
- Simone Romano
- Gino Farisano
- Data ultimo aggiornamento: 16/05/2015
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement