Implementación de un Clúster de Big Data de Alta Disponibilidad con Hadoop y su Ecosistema

Administración y Comandos Esenciales del Clúster

Para operar un entorno de alta disponibilidad (HA) basado en Hadoop, es fundamental dominar los comandos de gestión de servicios y conmutación por error.

# Inicialización general del ecosistema
start-all.sh

# Gestión de ZooKeeper
zkServer.sh start

# Gestión de nodos HDFS (JournalNode, NameNode, DataNode, ZKFC)
hdfs --daemon start journalnode
hdfs --daemon start namenode
hdfs --daemon start zkfc
hdfs --daemon start datanode

# Operaciones de Alta Disponibilidad
hdfs haadmin -failover nn-active nn-standby
hdfs haadmin -getServiceState nn-primary

# Administración de HDFS
hdfs dfsadmin -safemode leave
hdfs dfsadmin -report

# Servidor de Historial de MapReduce
mr-jobhistory-daemon.sh start historyserver

Preparación del Entorno Base: JDK, Hadoop y ZooKeeper

La base de cualquier clúster de Big Data requiere una configuración rigurosa de las variables de entorno y la estructura de directorios. En esta implementación, utilizaremos el directorio /opt/ para mantener la consistencia.

# Descompresión de los binarios
tar -xvzf openjdk-11_linux-x64_bin.tar.gz -C /opt/java
tar -xvzf hadoop-3.3.4.tar.gz -C /opt/hadoop
tar -xvzf apache-zookeeper-3.8.0-bin.tar.gz -C /opt/zookeeper

# Configuración de variables de entorno en /etc/profile.d/bigdata.sh
export JAVA_ROOT=/opt/java/jdk-11
export HADOOP_ROOT=/opt/hadoop/hadoop-3.3.4
export ZK_ROOT=/opt/zookeeper/apache-zookeeper-3.8.0-bin
export HADOOP_LOG_DIR=/var/log/hadoop
export YARN_LOG_DIR=$HADOOP_LOG_DIR

export PATH=$JAVA_ROOT/bin:$HADOOP_ROOT/bin:$HADOOP_ROOT/sbin:$ZK_ROOT/bin:$PATH

Tras definir las variables, es obligatorio recargar la sesión o ejecutar source /etc/profile.d/bigdata.sh. Asegúrese de ajustar los archivos zoo.cfg y los XML de Hadoop (core-site.xml, hdfs-site.xml) para reflejar estas nuevas rutas y los nodos del clúster.

Despliegue de Hive y Configuración del Metastore Relacional

Apache Hive requiere una base de datos relacional para su Metastore. Procederemos a instalar y asegurar una instancia de MySQL, seguida de la configuración de Hive.

# Instalación y aseguramiento de MySQL
yum install -y mysql-server
systemctl start mysqld
systemctl enable mysqld

# Configuración de credenciales y permisos
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'SecureP@ssw0rd!';
CREATE USER 'hive_admin'@'%' IDENTIFIED BY 'HiveStr0ngP@ss!';
GRANT ALL PRIVILEGES ON metastore_db.* TO 'hive_admin'@'%';
FLUSH PRIVILEGES;
CREATE DATABASE metastore_db CHARACTER SET utf8mb4;

A continuación, configuramos Hive para que se conecte a este metastore:

# Extracción y enlace simbólico
tar -xvzf apache-hive-3.1.3-bin.tar.gz -C /opt/hive
ln -s /opt/hive/apache-hive-3.1.3-bin /opt/hive/current

# Variables de entorno para Hive
export HIVE_ROOT=/opt/hive/current
export PATH=$HIVE_ROOT/bin:$PATH

El archivo hive-site.xml debe contener la configuración de conexión JDBC:

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://db-server:3306/metastore_db?createDatabaseIfNotExist=true&useSSL=false</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.cj.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive_admin</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>HiveStr0ngP@ss!</value>
    </property>
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
</configuration>

Finalmente, copie el conector JDBC de MySQL en $HIVE_ROOT/lib e inicialice el esquema: schematool -initSchema -dbType mysql.

Implementación de HBase en Modo Distribuido

HBase depende de un HDFS funcional y de un clúster de ZooKeeper externo para la coordinación. La sincronización de tiempo (NTP/Chrony) entre nodos es crítica.

# Despliegue de binarios
tar -xvzf hbase-2.4.12-bin.tar.gz -C /opt/hbase
export HBASE_ROOT=/opt/hbase/hbase-2.4.12
export PATH=$HBASE_ROOT/bin:$PATH

En hbase-env.sh, deshabilite la gestión interna de ZooKeeper:

export JAVA_ROOT=/opt/java/jdk-11
export HBASE_CLASSPATH=$HADOOP_ROOT/etc/hadoop
export HBASE_MANAGES_ZK=false

Configure hbase-site.xml para el modo distribuido:

<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://ha-hdfs-cluster/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>zk-node-1,zk-node-2,zk-node-3</value>
    </property>
    <property>
        <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
    </property>
</configuration>

Defina los nodos RegionServer en el archivo regionservers (ej. worker-node-1, worker-node-2) y distribuya la configuración mediante rsync o scp. Inicie el Master con hbase-daemon.sh start master y los RegionServers con hbase-daemon.sh start regionserver.

Integración de Sqoop para Transferencia de Datos

Sqoop actúa como puente entre Hadoop y las bases de datos relacionales. Requiere que las variables de Hadoop y Java estén correctamente exportadas.

# Instalación y configuración
tar -xvzf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt/sqoop
export SQOOP_ROOT=/opt/sqoop/sqoop-1.4.7
export PATH=$SQOOP_ROOT/bin:$PATH

# Configuración de entorno en sqoop-env.sh
export HADOOP_COMMON_HOME=$HADOOP_ROOT
export HADOOP_MAPRED_HOME=$HADOOP_ROOT
export HIVE_ROOT=/opt/hive/current
export ZK_ROOT=/opt/zookeeper/apache-zookeeper-3.8.0-bin

Es obligatorio incluir el driver JDBC correspondiente en $SQOOP_ROOT/lib. Para validar la conectividad:

sqoop list-databases \
  --connect jdbc:mysql://db-server:3306/ \
  --username hive_admin \
  --password HiveStr0ngP@ss!

Configuración de Apache Flume

Flume se utiliza para la ingesta de datos en streaming. Tras extraer los binarios en /opt/flume, configure el entorno:

export FLUME_ROOT=/opt/flume/apache-flume-1.9.0-bin
export FLUME_CONF_DIR=$FLUME_ROOT/conf
export PATH=$FLUME_ROOT/bin:$PATH

En flume-env.sh, asegúrese de apuntar a la instalación de Java. Para probar un agente con una configuración de consola:

flume-ng agent \
  --name ingestion-agent \
  --conf $FLUME_CONF_DIR \
  --conf-file $FLUME_CONF_DIR/flume-conf.properties \
  -Dflume.root.logger=INFO,console

Despliegue del Clúster de Kafka

Kafka requiere ZooKeeper para la gestión de metadatos (en versiones previas a KRaft). La configuración se centra en server.properties.

# Preparación de directorios y binarios
tar -xvzf kafka_2.13-3.4.0.tgz -C /opt/kafka
export KAFKA_ROOT=/opt/kafka/kafka_2.13-3.4.0
export PATH=$KAFKA_ROOT/bin:$PATH
mkdir -p /var/log/kafka

Parámetros críticos en server.properties:

# Identificador único por nodo (ej. 101, 102, 103)
broker.id=101

# Directorio de logs
log.dirs=/var/log/kafka

# Habilitar eliminación de tópicos
delete.topic.enable=true

# Conexión a ZooKeeper
zookeeper.connect=zk-node-1:2181,zk-node-2:2181,zk-node-3:2181

Distribuya los binarios y modifique el broker.id en cada nodo. Inicie el servicio en segundo plano:

kafka-server-start.sh -daemon $KAFKA_ROOT/config/server.properties

Validación de tópicos:

kafka-topics.sh --bootstrap-server kafka-node-1:9092 --create \
  --topic telemetry-stream --partitions 3 --replication-factor 2

Implementación de Apache Spark

Spark requieer Scala y se integra con YARN o puede ejecutarse en su propio clúster Standalone. Configuraremos el modo Standalone para este despliegue.

# Instalación de Scala
tar -xvzf scala-2.12.17.tgz -C /opt/scala
export SCALA_ROOT=/opt/scala/scala-2.12.17
export PATH=$SCALA_ROOT/bin:$PATH

# Despliegue de Spark
tar -xvzf spark-3.3.2-bin-hadoop3.tgz -C /opt/spark
export SPARK_ROOT=/opt/spark/spark-3.3.2-bin-hadoop3
export PATH=$SPARK_ROOT/bin:$SPARK_ROOT/sbin:$PATH

Configure spark-env.sh:

export JAVA_ROOT=/opt/java/jdk-11
export HADOOP_CONF_DIR=$HADOOP_ROOT/etc/hadoop
export SPARK_MASTER_HOST=spark-master-node
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=4
export SPARK_WORKER_MEMORY=4g

Defina los nodos trabajadores en el archivo workers. Para evitar conflictos con los scripts de Hadoop, renombre los scripts de inicio de Spark:

mv $SPARK_ROOT/sbin/start-all.sh $SPARK_ROOT/sbin/start-spark-cluster.sh
mv $SPARK_ROOT/sbin/stop-all.sh $SPARK_ROOT/sbin/stop-spark-cluster.sh

Ejecute start-spark-cluster.sh desde el nodo maestro para inicializar el clúster de Spark.

Etiquetas: Hadoop Zookeeper HBase hive Sqoop

Publicado el 7-4 23:47