Fundamentos de HDFS: Arquitectura e Implementación Práctica

Componentes Principales del Ecosistema Hadoop

El framework Hadoop se compone de tres módulos eesnciales para el procesamiento distribuido de grandes volúmenes de datos:

  • Hadoop Distributed File System (HDFS): Un sistema de almacenamiento diseñado para ejecutarse sobre hardware común, optimizado para el almacenamiento de datos masivos con un alto throughput de acceso.
  • YARN (Yet Another Resource Negotiator): La capa de gestión de recursos y planificación de tareas del clúster. Permite a múltiples frameworks de procesamiento de datos compartir los recursos del clúster de manera segura y eficiente.
  • MapReduce: Un modelo de programación para procesar grandes conjuntos de datos en paralelo a través de un clúster. En la arquitectura moderna de Hadoop, su planificación es gestionada por YARN.

Arquitectura de un Clúster HDFS

HDFS sigue un patrón de arquitectura maestro-esclavo (centralizado). Sus roles principales son:

  • NameNode (Maestro): Es el nodo central que gestiona el sistema de archivos. Almacena la metadata (información de bloques, ubicaciones de réplicas, estructura de directorios) en memoria. Es el punto único de coordinación para todas las operaciones de lectura y escritura de clientes.
  • DataNode (Esclavo): Son los nodos de trabajo que almacenan los bloques de datos reales en su sistema de archivos local. Reportan periódicamente su estado y los bloques que poseen al NameNode (heartbeat).
  • Secondary NameNode (Nodo Auxiliar): Es un rol complementario, no es un NameNode de respaldo en caliente. Su función principal es ayudar al NameNode a fusionar el log de ediciones (fsimage) con el archivo de imagen del sistema de archivos, reduciendo el tiempo de reinicio del NameNode principal.

Para abordar la limitación de un punto único de fallo (SPOF) en el NameNode, se implementa una arquitectura de Alta Disponibilidad (HA). Esta configuración utiliza múltiples NameNodes (generalmente dos: uno activo y otro en espera) que comparten una escritura persistente del estado del sistema (por ejemplo, mediante un servicio de quórum como ZooKeeper). Si el NameNode activo falla, el NameNode en espera toma el control rápidamente.

Un clúster HDFS típico puede escalar añadiendo más DataNodes para incrementar la capacidad de almacenamiento y el paralelismo de lectura/escritura. Si se necesita mayor capacidad de gestión de metadata, se puede optimizar el hardware del NameNode (más RAM, CPU más rápida).

Implementación Práctica de un Clúster HDFS

Requisitos Previos y Planificación

Para desplegar un clúster HDFS funcional, se necesita:

  1. Un conjunto de servidores (mínimo 3 para tolerancia a fallos básica).
  2. Acceso SSH sin contraseña entre los nodos.
  3. Instalación de Java Development Kit (JDK).
  4. Desactivación de firewalls o configuración de reglas específicas.
  5. Sincronización de hora (NTP) entre todos los nodos.

Ejemplo de planificación de nodos:

  • maestro1 (NameNode): 4 GB RAM, 2 vCPUs.
  • trabajador1 (DataNode + Secondary NameNode): 2 GB RAM, 1 vCPU.
  • trabajador2 (DataNode): 2 GB RAM, 1 vCPU.

Se asigna el NameNode al servidor con mejores recursos. El Secondary NameNode se coloca en un nodo DataNode distinto al NameNode.

Pasos de Instalación y Configuración

1. Preparación del Software: Descargar y descomprimir el binario de Hadoop en el directorio del servidor.

# En el directorio /opt/software
tar -xzvf hadoop-3.3.6-bin.tar.gz -C /opt/module/
# Crear enlace simbólico para facilidad de uso
ln -s /opt/module/hadoop-3.3.6 /opt/module/hadoop

2. Configuración del Entorno: Editar /etc/profile en todos los nodos.

export HADOOP_HOME=/opt/module/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

Aplicar los cambios con source /etc/profile.

3. Configuración de los Archivos de Hadoop: Situados en $HADOOP_HOME/etc/hadoop/.

  • workers: Listar los hostnames de los DataNodes (uno por línea). ``` trabajador1 trabajador2
  • hadoop-env.sh: Definir variables de entorno. ``` export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root
  • core-site.xml: Configuración central del sistema. ``` fs.defaultFS hdfs://maestro1:9000
  • hdfs-site.xml: Configuración específica de HDFS. ``` dfs.replication 2 dfs.namenode.name.dir file:///hadoop/namenode/data dfs.datanode.data.dir file:///hadoop/datanode/data dfs.namenode.secondary.http-address trabajador1:9868
    
    

4. Preparación de Directorios y Distribución:

# En maestro1 (NameNode)
mkdir -p /hadoop/namenode/data

# En trabajador1 y trabajador2 (DataNodes)
mkdir -p /hadoop/datanode/data

# Distribuir la instalación de Hadoop a los nodos trabajadores
scp -r /opt/module/hadoop-3.3.6 trabajador1:/opt/module/
scp -r /opt/module/hadoop-3.3.6 trabajador2:/opt/module/

5. Formateo e Inicio del Clúster:

# SOLO EN EL NODO DEL NAMENODE (maestro1)
hdfs namenode -format

# Iniciar el sistema de archivos distribuido
start-dfs.sh

6. Verificación del Estado:

# Verificar los procesos Java en cada nodo
jps

# Acceder a la interfaz web del NameNode
# http://IP_DEL_MAESTRO1:9870

# Listar los nodos vivos
hdfs dfsadmin -report

Operaciones Básicas de Shell en HDFS

Los comandso de shell para interactuar con HDFS tienen una sintaxis similar a los comandos de Linux.

  • Listar contenido: hdfs dfs -ls /
  • Crear un directorio: hdfs dfs -mkdir -p /user/datos/prueba
  • Subir un archivo local a HDFS: hdfs dfs -put ./archivo_local.txt /user/datos/prueba/
  • Descargar un archivo de HDFS: hdfs dfs -get /user/datos/prueba/archivo_local.txt ./descargas/
  • Eliminar un archivo o directorio: hdfs dfs -rm -r /user/datos/prueba/archivo_obsoleto

Importante: En HDFS se trabaja con rutas absolutas que comienzan desde la raíz del sistema de archivos (/). No existe el concepto de directorio de trabajo relativo como en un sistema operativo local.

Etiquetas: Hadoop HDFS NameNode DataNode Arquitectura Distribuida

Publicado el 6-4 04:58