Installa Hadoop Multinode Cluster utilizzando CDH4 in RHEL/CentOS 6.5
Hadoop è un framework di programmazione open source sviluppato da Apache per elaborare i big data. Utilizza HDFS (Hadoop Distributed File System) per archiviare i dati su tutti i datanode nel cluster in modo distributivo e un modello mapreduce per elaborare i dati.
Namenode (NN) è un demone principale che controlla HDFS e Jobtracker (JT ) è il demone principale per il motore mapreduce.
Requisiti
In questo tutorial utilizzo due VM CentOS 6.3 "master" e "node", vale a dire. (master e nodo sono i miei nomi host). L'IP "master" è 172.21.17.175 e l'IP del nodo è "172.21.17.188". Le seguenti istruzioni funzionano anche sulle versioni RHEL/CentOS 6.x.
Sul Maestro
[root@master ~]# hostname
master
[root@master ~]# ifconfig|grep 'inet addr'|head -1
inet addr:172.21.17.175 Bcast:172.21.19.255 Mask:255.255.252.0
Sul nodo
[root@node ~]# hostname
node
[root@node ~]# ifconfig|grep 'inet addr'|head -1
inet addr:172.21.17.188 Bcast:172.21.19.255 Mask:255.255.252.0
Per prima cosa assicurati che tutti gli host del cluster siano presenti nel file '/etc/hosts' (su ciascun nodo), se non hai configurato il DNS.
Sul Maestro
[root@master ~]# cat /etc/hosts
172.21.17.175 master
172.21.17.188 node
Sul nodo
[root@node ~]# cat /etc/hosts
172.21.17.197 qabox
172.21.17.176 ansible-ground
Installazione del cluster Hadoop Multinode in CentOS
Utilizziamo il repository CDH ufficiale per installare CDH4 su tutti gli host (master e nodo) in un cluster.
Passaggio 1: scarica Installa il repository CDH
Vai alla pagina di download ufficiale di CDH e prendi la versione CDH4 (ovvero 4.6) oppure puoi utilizzare il seguente comando wget per scaricare il repository e installarlo.
Su RHEL/CentOS a 32 bit
wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/i386/cloudera-cdh-4-0.i386.rpm
yum --nogpgcheck localinstall cloudera-cdh-4-0.i386.rpm
Su RHEL/CentOS a 64 bit
wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_64.rpm
yum --nogpgcheck localinstall cloudera-cdh-4-0.x86_64.rpm
Prima di installare Hadoop Multinode Cluster, aggiungi la chiave GPG pubblica Cloudera al tuo repository eseguendo uno dei seguenti comandi in base all'architettura del tuo sistema.
## on 32-bit System ##
rpm --import http://archive.cloudera.com/cdh4/redhat/6/i386/cdh/RPM-GPG-KEY-cloudera
## on 64-bit System ##
rpm --import http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera
Passaggio 2: imposta JobTracker e NameNode
Successivamente, esegui il comando seguente per installare e configurare JobTracker e NameNode sul server master.
[root@master ~]# yum clean all
[root@master ~]# yum install hadoop-0.20-mapreduce-jobtracker
[root@master ~]# yum clean all
[root@master ~]# yum install hadoop-hdfs-namenode
Passaggio 3: impostazione del nodo del nome secondario
Ancora una volta, esegui i seguenti comandi sul server master per configurare il nodo del nome secondario.
[root@master ~]# yum clean all
[root@master ~]# yum install hadoop-hdfs-secondarynam
Passaggio 4: imposta Tasktracker e Datanode
Successivamente, configura tasktracker e datanode su tutti gli host del cluster (nodo) ad eccezione degli host NameNode JobTracker, NameNode e secondario (o standby) (sul nodo in questo caso).
[root@node ~]# yum clean all
[root@node ~]# yum install hadoop-0.20-mapreduce-tasktracker hadoop-hdfs-datanode
Passaggio 5: configurare il client Hadoop
Puoi installare il client Hadoop su una macchina separata (in questo caso l'ho installato su datanode puoi installarlo su qualsiasi macchina).
[root@node ~]# yum install hadoop-client
Passaggio 6: distribuire HDFS sui nodi
Ora, se abbiamo terminato i passaggi precedenti, andiamo avanti con la distribuzione di hdfs (da eseguire su tutti i nodi).
Copia la configurazione predefinita nella directory /etc/hadoop (su ciascun nodo del cluster).
[root@master ~]# cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster
[root@node ~]# cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster
Utilizza il comando alternatives per impostare la directory personalizzata, come segue (su ciascun nodo del cluster).
[root@master ~]# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
reading /var/lib/alternatives/hadoop-conf
[root@master ~]# alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
[root@node ~]# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
reading /var/lib/alternatives/hadoop-conf
[root@node ~]# alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
Passaggio 7: personalizzazione dei file di configurazione
Ora apri il file "core-site.xml" e aggiorna "fs.defaultFS" su ciascun nodo del cluster.
[root@master conf]# cat /etc/hadoop/conf/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master/</value>
</property>
</configuration>
[root@node conf]# cat /etc/hadoop/conf/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master/</value>
</property>
</configuration>
Prossimo aggiornamento "dfs.permissions.superusergroup" in hdfs-site.xml su ogni nodo del cluster.
[root@master conf]# cat /etc/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/var/lib/hadoop-hdfs/cache/hdfs/dfs/name</value>
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value>
</property>
</configuration>
[root@node conf]# cat /etc/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/var/lib/hadoop-hdfs/cache/hdfs/dfs/name</value>
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value>
</property>
</configuration>
Nota: assicurati che la configurazione precedente sia presente su tutti i nodi (eseguila su un nodo ed esegui scp per copiare sul resto dei nodi).
Passaggio 8: configurazione delle directory di archiviazione locali
Aggiorna "dfs.name.dir o dfs.namenode.name.dir" in "hdfs-site.xml" sul NameNode (su Master e Node). Si prega di modificare il valore come evidenziato.
[root@master conf]# cat /etc/hadoop/conf/hdfs-site.xml
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/1/dfs/nn,/nfsmount/dfs/nn</value>
</property>
[root@node conf]# cat /etc/hadoop/conf/hdfs-site.xml
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/1/dfs/dn,/data/2/dfs/dn,/data/3/dfs/dn</value>
</property>
Passaggio 9: crea directory e gestisci le autorizzazioni
Esegui i comandi seguenti per creare la struttura di directory e gestire le autorizzazioni utente sulla macchina Namenode (Master) e Datanode (Nodo).
[root@master]# mkdir -p /data/1/dfs/nn /nfsmount/dfs/nn
[root@master]# chmod 700 /data/1/dfs/nn /nfsmount/dfs/nn
[root@node]# mkdir -p /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn
[root@node]# chown -R hdfs:hdfs /data/1/dfs/nn /nfsmount/dfs/nn /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn
Formattare il Namenode (sul Master), emettendo il seguente comando.
[root@master conf]# sudo -u hdfs hdfs namenode -format
Passaggio 10: configurazione del NameNode secondario
Aggiungi la seguente proprietà al file hdfs-site.xml e sostituisci il valore come mostrato su Master.
<property>
<name>dfs.namenode.http-address</name>
<value>172.21.17.175:50070</value>
<description>
The address and port on which the NameNode UI will listen.
</description>
</property>
Nota: nel nostro caso il valore dovrebbe essere l'indirizzo IP della VM master.
Ora implementiamo MRv1 ( Map-reduce versione 1 ). Apri il file "mapred-site.xml" seguendo i valori come mostrato.
[root@master conf]# cp hdfs-site.xml mapred-site.xml
[root@master conf]# vi mapred-site.xml
[root@master conf]# cat mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:8021</value>
</property>
</configuration>
Successivamente, copia il file "mapred-site.xml" sul computer del nodo utilizzando il seguente comando scp.
[root@master conf]# scp /etc/hadoop/conf/mapred-site.xml node:/etc/hadoop/conf/
mapred-site.xml 100% 200 0.2KB/s 00:00
Ora configura le directory di archiviazione locale da utilizzare dai demoni MRv1. Apri nuovamente il file "mapred-site.xml" e apporta le modifiche come mostrato di seguito per ciascun TaskTracker.
<property>
 <name>mapred.local.dir</name>
 <value>/data/1/mapred/local,/data/2/mapred/local,/data/3/mapred/local</value>
</property>
Dopo aver specificato queste directory nel file "mapred-site.xml", devi creare le directory e assegnare loro le autorizzazioni di file corrette su ciascun nodo del tuo cluster.
mkdir -p /data/1/mapred/local /data/2/mapred/local /data/3/mapred/local /data/4/mapred/local
chown -R mapred:hadoop /data/1/mapred/local /data/2/mapred/local /data/3/mapred/local /data/4/mapred/local
Passaggio 10: avvia HDFS
Ora esegui il comando seguente per avviare HDFS su ogni nodo del cluster.
[root@master conf]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done
[root@node conf]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done
Passaggio 11: creare le directory HDFS /tmp e MapReduce /var
È necessario creare /tmp con le autorizzazioni appropriate esattamente come indicato di seguito.
[root@master conf]# sudo -u hdfs hadoop fs -mkdir /tmp
[root@master conf]# sudo -u hdfs hadoop fs -chmod -R 1777 /tmp
[root@master conf]# sudo -u hdfs hadoop fs -mkdir -p /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
[root@master conf]# sudo -u hdfs hadoop fs -chmod 1777 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
[root@master conf]# sudo -u hdfs hadoop fs -chown -R mapred /var/lib/hadoop-hdfs/cache/mapred
Ora verifica la struttura del file HDFS.
[root@node conf]# sudo -u hdfs hadoop fs -ls -R /
drwxrwxrwt - hdfs hadoop 0 2014-05-29 09:58 /tmp
drwxr-xr-x - hdfs hadoop 0 2014-05-29 09:59 /var
drwxr-xr-x - hdfs hadoop 0 2014-05-29 09:59 /var/lib
drwxr-xr-x - hdfs hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs
drwxr-xr-x - hdfs hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache
drwxr-xr-x - mapred hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred
drwxr-xr-x - mapred hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred/mapred
drwxrwxrwt - mapred hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
Dopo aver avviato HDFS e creato '/tmp', ma prima di avviare JobTracker, crea la directory HDFS specificata dal parametro 'mapred.system.dir' (per impostazione predefinita $ {hadoop.tmp .dir}/mapred/system e cambia proprietario in mapred.
[root@master conf]# sudo -u hdfs hadoop fs -mkdir /tmp/mapred/system
[root@master conf]# sudo -u hdfs hadoop fs -chown mapred:hadoop /tmp/mapred/system
Passaggio 12: avviare MapReduce
Per avviare MapReduce: avviare i servizi TT e JT.
Su ciascun sistema TaskTracker
[root@node conf]# service hadoop-0.20-mapreduce-tasktracker start
Starting Tasktracker: [ OK ]
starting tasktracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-tasktracker-node.out
Sul sistema JobTracker
[root@master conf]# service hadoop-0.20-mapreduce-jobtracker start
Starting Jobtracker: [ OK ]
starting jobtracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-jobtracker-master.out
Successivamente, crea una directory home per ciascun utente Hadoop. è consigliabile farlo su NameNode; Per esempio.
[root@master conf]# sudo -u hdfs hadoop fs -mkdir /user/<user>
[root@master conf]# sudo -u hdfs hadoop fs -chown <user> /user/<user>
Nota: dove è il nome utente Linux di ciascun utente.
In alternativa, è possibile creare la directory home come segue.
[root@master conf]# sudo -u hdfs hadoop fs -mkdir /user/$USER
[root@master conf]# sudo -u hdfs hadoop fs -chown $USER /user/$USER
Passaggio 13: aprire JT, NN UI dal browser
Apri il browser e digita l'URL come http://ip_address_of_namenode:50070 per accedere a Namenode.
Apri un'altra scheda nel browser e digita l'URL come http://ip_address_of_jobtracker:50030 per accedere a JobTracker.
Questa procedura è stata testata con successo su RHEL/CentOS 5.X/6.X. Per favore commenta di seguito se riscontri problemi con l'installazione, ti aiuterò con le soluzioni.