In questa lezione vedremo come installare Hadoop su Ubuntu 12.04 LTS (successivamente esamineremo anche il processo di installazione su Windows). La release di riferimento per gli esempi che seguiranno sarà la 2.4.0, possiamo utilizzare l'ultima versione stabile di Hadoop (scaricabile da qui), i passaggi sono praticamente gli stessi.
Hadoop su Ubuntu: pre-configurazione del sistema
Prerequisiti:
- Oracle Java JDK (versione 7);
- Aggiunta di un utente di sistema dedicato Hadoop;
- Configurazione SSH;
Per installare Java 7, digitiamo i seguenti comandi:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-jdk7-installer
Per verificare che l'installazione sia andata a buon fine digitiamo java -version
che visualizzerà la versione di Java installata. Questa seconda operazione non è strettamente obbligatoria, ma è consigliata perché permette di separare l'installazione di Hadoop dagli altri software applicativi già installati; digitiamo quindi i seguenti comandi:
sudo addgroup hadoop
sudo adduser --ingroup hadoop hduser
che permetteranno di aggiungere l'utente hduser
al gruppo hadoop
sulla macchina locale.
Hadoop richiede un accesso tramite SSH per la gestione dei suoi nodi. Nel nostro caso permetteremo all'utente hduser
di accedere al localhost
configurando SSH eseguendo i seguenti comandi:
su - hduser
ssh-keygen -t rsa -P ""
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hduser/.ssh/id_rsa):
a questo punto premendo invio comparirà i seguente output
Created directory '/home/hduser/.ssh'.
Your identification has been saved in /home/hduser/.ssh/id_rsa.
Your public key has been saved in /home/hduser/.ssh/id_rsa.pub.
...
e un'altra serie di messaggi che descrivono il risultato dell'esecuzione. Successivamente, forniamo un accesso SSH per accedere alla macchina con la chiave appena creata:
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
Per testare che la configurazione sia andata a buon fine digitiamo:
ssh localhost
Può capitare che il sistema ci risponda con questo messaggio:
ssh: connect to host localhost port 22: Connection refused
Questo indica che sulla macchina non è presente il demone ssh
(o non è in esecuzione). Per rimendiare digitiamo:
sudo apt-get install openssh-server
Al termine dell'installazione, ridigitiamo il comando ssh localhost
, in questo caso il sistema risponderà con un messaggio simile a quello che segue:
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is d7:87:25:47:ae:02:00:eb:1d:75:4f:bb:44:f9:36:26.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
Con questo si conclude la fase di pre-configurazione del sistema. Vediamo ora come installare Hadoop.
Installazione di Hadoop
Dopo aver scaricato il software Hadoop, installiamolo in una directory a piacere. Ad esempio in /usr/local/hadoop
:
cd /usr/local
sudo tar xzf hadoop-2.4.0.tar.gz
sudo mv hadoop-2.4.0 hadoop
sudo chown -R hduser:hadoop hadoop
Aggiungiamo le seguenti righe in fondo al file $HOME/.bashrc
per l'utente hduser
:
# Set Hadoop-related environment variables
export HADOOP_HOME=/usr/local/hadoop
# Set JAVA_HOME (we will also configure JAVA_HOME directly for Hadoop later on)
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
# Some convenient aliases and functions for running Hadoop-related commands
unalias fs &> /dev/null
alias fs="hadoop fs"
unalias hls &> /dev/null
alias hls="fs -ls"
# If you have LZO compression enabled in your Hadoop cluster and
# compress job outputs with LZOP (not covered in this tutorial):
# Conveniently inspect an LZOP compressed file from the command
# line; run via:
#
# $ lzohead /hdfs/path/to/lzop/compressed/file.lzo
#
# Requires installed 'lzop' command.
#
lzohead () {
hadoop fs -cat $1 | lzop -dc | head -1000 | less
}
# Add Hadoop bin/ directory to PATH
export PATH=$PATH:$HADOOP_HOME/bin
Infine, editiamo il file /usr/local/hadoop/etc/hadoop/hadoop-env.sh
individuando la riga
export JAVA_HOME=${JAVA_HOME}
e sostituendola con la riga
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
Configurazione
La configurazione di Hadoop, consiste nell'editare il file /usr/local/hadoop/etc/hadoop/core-site.xml
. In questo file possiamo ad esempio indicare la directory in cui Hadoop memorizza i data files, la porta di ascolto, etc. Editare il file, significa inserire i parametri di configurazione tra i tag xml configuration
. Supponiamo di voler configurare il percorso di base per le directory in cui risiederanno i file di input e di output utilizzati dai job di MapReduce. Innanzitutto creiamo una directory tmp
:
sudo mkdir -p /app/hadoop/tmp
sudo chown hduser:hadoop /app/hadoop/tmp
sudo chmod 750 /app/hadoop/tmp
Successivamente inseriamo le seguenti proprietà nel file core-site.xml
:
<property>
<name>hadoop.tmp.dir </name>
<value>/app/hadoop/tmp </value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:54310</value>
<description>
Il nome del file system predefinito.
Un URI il cui schema e authority determinano l'implementazione del filesystem.
Il formato è il seguente : fs.SCHEME.impl nominare la classe di implementazione filesystem. L'authority dell'uri viene utilizzato per determinare l'host, porta, ecc per un filesystem.
</description>
</property>
Allo stesso modo, possiamo gli altri due file principali di Hadoop. Editiamo mapred-site.xml
con le seguenti proprietà:
<property>
<name>mapred.job.tracker</name>
<value>localhost:54311</value>
<description>
Host e porta su cui viene lanciato il MapReduce job tracker.Se "locale", allora i jobs sono eseguiti in un unico processo come un singolo map e reduce task.
</description>
</property>
e hdfs-site.xml
con le seguenti proprietà:
<property>
<name>dfs.replication</name>
<value>1</value>
<description>
Default block replication. Il numero di repliche può essere specificato quando viene creato il file. Il default viene usato se la replica non è specificata al momento della creazione.
</description>
</property>
Ultimata la configurazione, procediamo con lo start della nostra installazione. Prima di tutto, formattiamo il file system lanciando il comando:
/usr/local/hadoop/bin/hadoop namenode -format
Esecuzione
Siamo finalmente pronti ad eseguire Hadoop: per farlo eseguiamo il file /usr/local/hadoop/sbin/start-all.sh
. Possiamo anche accedere all'interfaccia Web di "Hadoop Administration" digitando il seguente indirizzo nel browser: http://localhost:50070
. Analogamente allo start, possiamo arrestare l'esecuzione di Hadoop lanciando il file /usr/local/hadoop/sbin/stop-all.sh