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 manera distributiva y el modelo mapreduce para procesar los datos.

Namenode (NN) es un demonio maestro que controla HDFS y Jobtracker (JT) es un demonio maestro para el motor mapreduce.

En este tutorial, estoy usando dos VM de CentOS 6.3 "maestro" y "nodo" 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.

[[email protected] ~]# hostname

master
[[email protected] ~]# ifconfig|grep 'inet addr'|head -1

inet addr:172.21.17.175  Bcast:172.21.19.255  Mask:255.255.252.0
[[email protected] ~]# hostname

node
[[email protected] ~]# 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 configurado el DNS.

[[email protected] ~]# cat /etc/hosts

172.21.17.175 master
172.21.17.188 node
[[email protected] ~]# cat /etc/hosts

172.21.17.197 qabox
172.21.17.176 ansible-ground

Instalación de Hadoop Multinode Cluster en CentOS

Usamos el repositorio oficial de CDH para instalar CDH4 en todos los hosts (maestro y nodo) en un clúster.

Vaya a la página de descarga oficial 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.

# 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
# 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 pública GPG 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

A continuación, ejecute el siguiente comando para instalar y configurar JobTracker y NameNode en el servidor maestro.

[[email protected] ~]# yum clean all 
[[email protected] ~]# yum install hadoop-0.20-mapreduce-jobtracker
[[email protected] ~]# yum clean all
[[email protected] ~]# yum install hadoop-hdfs-namenode

Nuevamente, ejecute los siguientes comandos en el servidor maestro para configurar el nodo de nombre secundario.

[[email protected] ~]# yum clean all 
[[email protected] ~]# yum install hadoop-hdfs-secondarynam

A continuación, configure el rastreador de tareas y el nodo de datos en todos los hosts del clúster (nodo) excepto los hosts JobTracker, NameNode y secundario (o en espera) NameNode (en el nodo en este caso).

[[email protected] ~]# yum clean all
[[email protected] ~]# yum install hadoop-0.20-mapreduce-tasktracker hadoop-hdfs-datanode

Puede instalar el cliente Hadoop en una máquina separada (en este caso lo he instalado en el nodo de datos, puede instalarlo en cualquier máquina).

[[email protected] ~]# yum install hadoop-client

Ahora, si hemos terminado con los pasos anteriores, avancemos para implementar hdfs (que se realizará en todos los nodos).

Copie la configuración predeterminada en el directorio /etc/hadoop (en cada nodo del clúster).

[[email protected] ~]# cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster
[[email protected] ~]# cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster

Use el comando alternativas para configurar su directorio personalizado, de la siguiente manera (en cada nodo del clúster).

[[email protected] ~]# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
reading /var/lib/alternatives/hadoop-conf

[[email protected] ~]# alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
[[email protected] ~]# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
reading /var/lib/alternatives/hadoop-conf

[[email protected] ~]# alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster

Ahora abra el archivo "core-site.xml" y actualice "fs.defaultFS" en cada nodo del clúster.

[[email protected] 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>
[[email protected] 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>

A continuación, actualice "dfs.permissions.superusergroup" en hdfs-site.xml en cada nodo del clúster.

[[email protected] 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>
[[email protected] 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 el resto de los nodos).

Actualice "dfs.name.dir o dfs.namenode.name.dir" en "hdfs-site.xml" en NameNode (en Master y Node). Cambie el valor resaltado.

[[email protected] 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>
[[email protected] 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>

Ejecute los siguientes comandos para crear una estructura de directorio y administrar los permisos de usuario en la máquina Namenode (Master) y Datanode (Node).

[[email protected]]# mkdir -p /data/1/dfs/nn /nfsmount/dfs/nn
[[email protected]]# chmod 700 /data/1/dfs/nn /nfsmount/dfs/nn
[[email protected]]#  mkdir -p /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn
[[email protected]]#  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.

[[email protected] conf]# sudo -u hdfs hdfs namenode -format

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.

[[email protected] conf]# cp hdfs-site.xml mapred-site.xml
[[email protected] conf]# vi mapred-site.xml
[[email protected] 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" en la máquina del nodo utilizando el siguiente comando scp.

[[email protected] 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 usen los demonios MRv1. Vuelva a abrir el archivo "mapred-site.xml" y realice los cambios que se muestran 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

Ahora ejecute el siguiente comando para iniciar HDFS en cada nodo del clúster.

[[email protected] conf]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done
[[email protected] conf]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done

Es necesario crear/tmp con los permisos adecuados exactamente como se menciona a continuación.

[[email protected] conf]# sudo -u hdfs hadoop fs -mkdir /tmp
[[email protected] conf]# sudo -u hdfs hadoop fs -chmod -R 1777 /tmp
[[email protected] conf]# sudo -u hdfs hadoop fs -mkdir -p /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
[[email protected] conf]# sudo -u hdfs hadoop fs -chmod 1777 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
[[email protected] conf]# sudo -u hdfs hadoop fs -chown -R mapred /var/lib/hadoop-hdfs/cache/mapred

Ahora verifique la estructura del archivo HDFS.

[[email protected] 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 & # 36 {hadoop.tmp.dir}/mapred/system y cambiar de propietario a asignado.

[[email protected] conf]# sudo -u hdfs hadoop fs -mkdir /tmp/mapred/system
[[email protected] conf]# sudo -u hdfs hadoop fs -chown mapred:hadoop /tmp/mapred/system

Para iniciar MapReduce: inicie los servicios TT y JT.

[[email protected] 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
[[email protected] 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 que haga esto en NameNode; por ejemplo.

[[email protected] conf]# sudo -u hdfs hadoop fs -mkdir  /user/<user>
[[email protected] 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.

[[email protected] conf]# sudo -u hdfs hadoop fs -mkdir /user/$USER
[[email protected] conf]# sudo -u hdfs hadoop fs -chown $USER /user/$USER

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. Comente a continuación si tiene algún problema con la instalación, lo ayudaré con las soluciones.