Ricerca nel sito web

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.