Configuración de Hadoop 2.7.1 en modo totalmente distribuido para entornos de producción

Este guía detalla la configuración de un clúster Hadoop 2.7.1 en modo totalmente distribuido en CentOS, utilizando tres nodos para lograr alta disponibilidad en HDFS y YARN.

Requisitos previos

  • Tres máquinas virtuales o físicas con CentOS instalado.
  • Paquete de Hadoop 2.7.1 descargado (por ejemplo, hadoop-2.7.1-64bit.tar.gz).
  • Acceso root a todos los nodos.

Paso 1: Desactivar el firewall en todos los nodos

# Detener firewall temporalmente
systemctl stop firewalld
# Desactivar firewall permanentemente
systemctl disable firewalld

Paso 2: Configurar nombres de host

Editar el archivo /etc/hostname en cada nodo para asignar nombres únicos, como nodo-maestro1, nodo-maestro2, nodo-esclavo1.

hostnamectl set-hostname nodo-maestro1  # Ejemplo en el primer nodo

Paso 3: Mapear direcciones IP a nombres de host

En el archivo /etc/hosts de cada nodo, agregar líneas como:

192.168.1.101 nodo-maestro1
192.168.1.102 nodo-maestro2
192.168.1.103 nodo-esclavo1

Asegúrese de que el contenido sea idéntico en todos los nodos.

Paso 4: Reiniciar los nodos

reboot

Paso 5: Configurar acceso SSH sin contraseña entre nodos

Generar claves SSH en cada nodo y copiarlas a los demás:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id root@nodo-maestro1
ssh-copy-id root@nodo-maestro2
ssh-copy-id root@nodo-esclavo1

Verificar el acceso: desde cualquier nodo, ejecutar ssh nodo-maestro1 sin contraseña.

Paso 6: Descomprimir e instalar Hadoop

tar -xzvf hadoop-2.7.1-64bit.tar.gz -C /opt/
mv /opt/hadoop-2.7.1 /opt/hadoop-cluster

Paso 7: Configurar variables de entorno para Hadoop

Editar el archivo /opt/hadoop-cluster/etc/hadoop/hadoop-env.sh:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export HADOOP_CONF_DIR=/opt/hadoop-cluster/etc/hadoop

Luego, aplicar los cambios con source hadoop-env.sh.

Paso 8: Configurar el archivo core-site.xml

En /opt/hadoop-cluster/etc/hadoop/core-site.xml, agregar:

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://mi-cluster-hdfs</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/hadoop-cluster/tmp</value>
  </property>
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>nodo-maestro1:2181,nodo-maestro2:2181,nodo-esclavo1:2181</value>
  </property>
</configuration>

Paso 9: Configurar el archivo hdfs-site.xml

En /opt/hadoop-cluster/etc/hadoop/hdfs-site.xml, definir la alta disponibilidad:

<configuration>
  <property>
    <name>dfs.nameservices</name>
    <value>mi-cluster-hdfs</value>
  </property>
  <property>
    <name>dfs.ha.namenodes.mi-cluster-hdfs</name>
    <value>nn1,nn2</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.mi-cluster-hdfs.nn1</name>
    <value>nodo-maestro1:9000</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mi-cluster-hdfs.nn1</name>
    <value>nodo-maestro1:50070</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.mi-cluster-hdfs.nn2</name>
    <value>nodo-maestro2:9000</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mi-cluster-hdfs.nn2</name>
    <value>nodo-maestro2:50070</value>
  </property>
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://nodo-maestro1:8485;nodo-maestro2:8485;nodo-esclavo1:8485/mi-cluster-hdfs</value>
  </property>
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/opt/hadoop-cluster/tmp/journal</value>
  </property>
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>dfs.client.failover.proxy.provider.mi-cluster-hdfs</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///opt/hadoop-cluster/tmp/hdfs/namenode</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///opt/hadoop-cluster/tmp/hdfs/datanode</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  <property>
    <name>dfs.permissions</name>
    <value>false</value>
  </property>
</configuration>

Paso 10: Configurar mapred-site.xml y yarn-site.xml

Copiar y editar los archivos de configuración:

# Para mapred-site.xml
cp /opt/hadoop-cluster/etc/hadoop/mapred-site.xml.template /opt/hadoop-cluster/etc/hadoop/mapred-site.xml
# Editar mapred-site.xml
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

En yarn-site.xml:

<configuration>
  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>nodo-maestro1</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>nodo-maestro2</value>
  </property>
  <property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  </property>
  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>nodo-maestro1:2181,nodo-maestro2:2181,nodo-esclavo1:2181</value>
  </property>
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>mi-cluster-yarn</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>nodo-maestro1</value>
  </property>
</configuration>

Paso 11: Definir los nodos esclavos

Editar el archivo /opt/hadoop-cluster/etc/hadoop/slaves:

nodo-maestro1
nodo-maestro2
nodo-esclavo1

Paso 12: Distribuir la configuración a todos los nodos

Copiar el directorio de Hadoop a los otros nodos:

scp -r /opt/hadoop-cluster root@nodo-maestro2:/opt/
scp -r /opt/hadoop-cluster root@nodo-esclavo1:/opt/

Paso 13: Configurar variables de entorno globales

En cada nodo, editar /etc/profile.d/hadoop.sh:

export HADOOP_HOME=/opt/hadoop-cluster
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

Aplicar con source /etc/profile.d/hadoop.sh.

Paso 14: Iniciar ZooKeeper y formatear el clúster

Si ZooKeeper ya está instalado y configurado, iniciar en cada nodo:

# Ejemplo con ZooKeeper en /opt/zookeeper
/opt/zookeeper/bin/zkServer.sh start
/opt/zookeeper/bin/zkServer.sh status

Formatear ZooKeeper para HDFS HA:

hdfs zkfc -formatZK

Paso 15: Iniciar los servicios de Hadoop

En cada nodo, iniciar los JournalNodes:

hadoop-daemon.sh start journalnode

Formatear el NameNode primario:

hdfs namenode -format

Iniciar NameNodes, DataNodes y otros servicios:

# En nodo-maestro1
hadoop-daemon.sh start namenode
# En nodo-maestro2
hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode
# En todos los nodos
hadoop-daemon.sh start datanode
# En nodos maestros
hadoop-daemon.sh start zkfc
# Iniciar YARN
start-yarn.sh
# En nodo-maestro1
yarn-daemon.sh start resourcemanager

Para iniciar todos los servicios de una vez en clústeres existentes, usar start-dfs.sh y start-yarn.sh.

Verificación

En cada nodo, ejecutar jps para confiramr los procesos activos. Los resultados deben mostrar NameNode, DataNode, JournalNode, ResourceManager, NodeManager, entre otros, según el rol del nodo.

Etiquetas: Hadoop HDFS YARN Clúster distribuido Alta Disponibilidad

Publicado el 6-24 00:48