Instale Hadoop Multinode Cluster usando CDH4 en RHEL/CentOS 6.5
Hadoop es un marco de programación de código abierto desarrollado por Apache para procesar big data. Utiliza HDFS (Hadoop Distributed File System) para almacenar los datos en todos los nodos de datos del clúster de forma distributiva y un modelo mapreduce para procesar los datos.
Namenode (NN) es un demonio maestro que controla HDFS y Jobtracker (JT ) es el demonio maestro para el motor mapreduce.
Requisitos
En este tutorial estoy usando dos máquinas virtuales CentOS 6.3, 'master' y 'node', a saber. (maestro y nodo son mis nombres de host). La IP 'maestra' es 172.21.17.175 y la IP del nodo es '172.21.17.188'. Las siguientes instrucciones también funcionan en las versiones RHEL/CentOS 6.x.
En 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
En el 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
Primero asegúrese de que todos los hosts del clúster estén en el archivo '/etc/hosts' (en cada nodo), si no tiene DNS configurado.
En maestro
[root@master ~]# cat /etc/hosts
172.21.17.175 master
172.21.17.188 node
En el nodo
[root@node ~]# cat /etc/hosts
172.21.17.197 qabox
172.21.17.176 ansible-ground
Instalación del clúster multinodo de Hadoop en CentOS
Usamos el repositorio oficial CDH para instalar CDH4 en todos los hosts (Master y Node) de un clúster.
Paso 1: Descargar Instalar el repositorio CDH
Vaya a la página oficial de descarga de CDH y obtenga la versión CDH4 (es decir, 4.6) o puede usar el siguiente comando wget para descargar el repositorio e instalarlo.
En RHEL/CentOS de 32 bits
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
En RHEL/CentOS de 64 bits
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
Antes de instalar Hadoop Multinode Cluster, agregue la clave GPG pública de Cloudera a su repositorio ejecutando uno de los siguientes comandos de acuerdo con la arquitectura de su 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
Paso 2: Configurar JobTracker y NameNode
A continuación, ejecute el siguiente comando para instalar y configurar JobTracker y NameNode en el servidor maestro.
[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
Paso 3: Configurar el nodo de nombre secundario
Nuevamente, ejecute los siguientes comandos en el servidor maestro para configurar el nodo de nombre secundario.
[root@master ~]# yum clean all
[root@master ~]# yum install hadoop-hdfs-secondarynam
Paso 4: Configurar Tasktracker y Datanode
A continuación, configure tasktracker y datanode en todos los hosts del clúster (Nodo), excepto en los hosts JobTracker, NameNode y NameNode secundario (o en espera) (en el nodo en este caso).
[root@node ~]# yum clean all
[root@node ~]# yum install hadoop-0.20-mapreduce-tasktracker hadoop-hdfs-datanode
Paso 5: configurar el cliente Hadoop
Puede instalar el cliente Hadoop en una máquina separada (en este caso lo instalé en datanode, puede instalarlo en cualquier máquina).
[root@node ~]# yum install hadoop-client
Paso 6: implementar HDFS en nodos
Ahora, si hemos terminado con los pasos anteriores, avancemos para implementar hdfs (que se realizará en todos los nodos).
Copie la configuración predeterminada al directorio /etc/hadoop (en cada nodo del clúster).
[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
Utilice el comando alternativas para configurar su directorio personalizado, de la siguiente manera (en cada nodo del clúster).
[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
Paso 7: Personalizar los archivos de configuración
Ahora abra el archivo 'core-site.xml' y actualice "fs.defaultFS" en cada nodo del clúster.
[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>
Próxima actualización “dfs.permissions.superusergroup” en hdfs-site.xml en cada nodo del clúster.
[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: asegúrese de que la configuración anterior esté presente en todos los nodos (hágalo en un nodo y ejecute scp para copiar en reposo de los nodos).
Paso 8: Configurar directorios de almacenamiento local
Actualice “dfs.name.dir o dfs.namenode.name.dir” en ‘hdfs-site.xml’ en NameNode (en Master y Node). Cambie el valor como se resalta.
[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>
Paso 9: crear directorios y administrar permisos
Ejecute los siguientes comandos para crear una estructura de directorios y administrar los permisos de usuario en las máquinas Namenode (Master) y Datanode (Node).
[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
Formatee el Namenode (en Master) emitiendo el siguiente comando.
[root@master conf]# sudo -u hdfs hdfs namenode -format
Paso 10: Configurar el NameNode secundario
Agregue la siguiente propiedad al archivo hdfs-site.xml y reemplace el valor como se muestra en 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: en nuestro caso, el valor debe ser la dirección IP de la máquina virtual maestra.
Ahora implementemos MRv1 (Map-reduce versión 1). Abra el archivo 'mapred-site.xml' siguiendo los valores como se muestra.
[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>
A continuación, copie el archivo 'mapred-site.xml' a la máquina del nodo usando el siguiente 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
Ahora configure los directorios de almacenamiento local para que los utilicen MRv1 Daemons. Vuelva a abrir el archivo 'mapred-site.xml' y realice los cambios como se muestra a continuación para cada TaskTracker.
<property>
 <name>mapred.local.dir</name>
 <value>/data/1/mapred/local,/data/2/mapred/local,/data/3/mapred/local</value>
</property>
Después de especificar estos directorios en el archivo 'mapred-site.xml', debe crear los directorios y asignarles los permisos de archivo correctos en cada nodo de su clúster.
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
Paso 10: inicie HDFS
Ahora ejecute el siguiente comando para iniciar HDFS en cada nodo del clúster.
[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
Paso 11: Crear directorios HDFS /tmp y MapReduce /var
Es necesario crear /tmp con los permisos adecuados exactamente como se menciona a continuación.
[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
Ahora verifique la estructura del archivo 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
Después de iniciar HDFS y crear '/tmp', pero antes de iniciar JobTracker, cree el directorio HDFS especificado por el parámetro 'mapred.system.dir' (por defecto $ {hadoop.tmp .dir}/mapred/system y cambie el propietario a 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
Paso 12: Inicie MapReduce
Para iniciar MapReduce: inicie los servicios TT y JT.
En cada 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
En el 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
A continuación, cree un directorio de inicio para cada usuario de hadoop. se recomienda hacer esto en NameNode; Por ejemplo.
[root@master conf]# sudo -u hdfs hadoop fs -mkdir /user/<user>
[root@master conf]# sudo -u hdfs hadoop fs -chown <user> /user/<user>
Nota: donde es el nombre de usuario de Linux de cada usuario.
Alternativamente, puede crear el directorio de inicio de la siguiente manera.
[root@master conf]# sudo -u hdfs hadoop fs -mkdir /user/$USER
[root@master conf]# sudo -u hdfs hadoop fs -chown $USER /user/$USER
Paso 13: Abra JT, NN UI desde el navegador
Abra su navegador y escriba la URL como http://ip_address_of_namenode:50070 para acceder a Namenode.
Abra otra pestaña en su navegador y escriba la URL como http://ip_address_of_jobtracker:50030 para acceder a JobTracker.
Este procedimiento se ha probado con éxito en RHEL/CentOS 5.X/6.X. Por favor comente a continuación si tiene algún problema con la instalación, lo ayudaré con las soluciones.