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.