Infraestructura educativa para experimentación con Big Data basada en Docker Compose.
Este repositorio proporciona un entorno reproducible que integra Hadoop/HDFS, Spark, Hive, Hue, Zeppelin, Kafka, ZooKeeper, NiFi y StreamSets, orientado al aprendizaje, laboratorios y demostraciones técnicas.
Versión 2.0.0 (2026): incorpora persistencia explícita para los componentes que almacenan estado y una configuración actualizada de Apache NiFi 2.12.0.
📺 Video de instalación y configuración:
https://youtu.be/qjjBWUUJq3s
⭐ Si este repositorio te resulta útil para estudiar o practicar, considera darle una estrella.
La versión 2.0.0 mantiene la arquitectura docente original, pero corrige un problema importante: en la versión anterior parte de la información podía quedar almacenada únicamente dentro del filesystem de los contenedores.
La nueva configuración incorpora almacenamiento persistente para los componentes que lo requieren, entre ellos:
- HDFS: persistencia de NameNode y DataNode.
- Hive: persistencia del Hive Metastore mediante PostgreSQL.
- NiFi: persistencia de configuración, estado y repositorios.
- Kafka y ZooKeeper: persistencia de sus datos.
- Zeppelin: persistencia de notebooks.
- StreamSets: persistencia de datos.
- MySQL: persistencia de la base de datos utilizada por el entorno.
Esto permite detener y recrear los contenedores mediante Docker Compose sin perder los datos persistentes, siempre que no se eliminen expresamente los volúmenes.
docker compose downelimina los contenedores y la red, pero conserva los volúmenes.
No utilicedocker compose down -vsi desea conservar los datos.
Antes de comenzar debe disponer de:
- Docker Engine.
- Docker Compose v2.
- Git, si desea clonar el repositorio.
- Puertos necesarios disponibles en el equipo o instancia.
- En AWS EC2, reglas del Security Group habilitadas únicamente para los servicios que necesite exponer.
La infraestructura actual utiliza:
docker-compose.yml
hadoop-hive.env
El archivo .env concentra los parámetros que pueden variar entre
instalaciones.
Para Apache NiFi, revise especialmente:
NIFI_PROXY_HOST=REEMPLAZAR_POR_IP_PUBLICA_EC2:9999
NIFI_USERNAME=admin
NIFI_PASSWORD=NifiLab2026!Secure
Para una instalación exclusivamente local puede utilizar:
NIFI_PROXY_HOST=localhost:9999
En AWS EC2 reemplace el valor por la IP pública o DNS público de la
instancia, seguido de :9999.
Clone o descargue este repositorio y sitúese en el directorio que contiene los archivos de la infraestructura.
Levante el entorno con:
sudo docker compose \
-f docker-compose.yml \
--env-file hadoop-hive.env \
up -dCompruebe los servicios:
sudo docker ps \
--format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'Los contenedores namenode y datanode deberían terminar mostrando
estado healthy.
Para detener y eliminar los contenedores conservando los volúmenes:
sudo docker compose \
-f docker-compose.yml \
--env-file hadoop-hive.env \
downPara volver a crearlos:
sudo docker compose \
-f docker-compose.yml \
--env-file hadoop-hive.env \
up -dLos datos persistentes están desacoplados del ciclo de vida de los contenedores mediante volúmenes Docker.
Por ello:
docker compose down
↓
se eliminan los contenedores
↓
los volúmenes permanecen
↓
docker compose up -d
↓
se recrean los contenedores
↓
los datos vuelven a estar disponibles
Esto no significa que los datos sean independientes del equipo anfitrión. Si se elimina la máquina, la instancia EC2 o el almacenamiento físico que contiene los volúmenes Docker, los datos también pueden desaparecer.
En un navegador utilice localhost para una instalación local o la
IP/DNS de la instancia cuando trabaje en AWS.
| Servicio | Puerto | Ejemplo local |
|---|---|---|
| Hadoop NameNode | 50070 | http://localhost:50070 |
| Spark Master | 8080 | http://localhost:8080 |
| Spark Worker | 8081 | http://localhost:8081 |
| Hue | 8888 | http://localhost:8888 |
| Apache NiFi | 9999 | https://localhost:9999/nifi/ |
| Kafka UI/servicio expuesto | 3030 | http://localhost:3030 |
| StreamSets | 18630 | http://localhost:18630 |
| Zeppelin | 19090 | http://localhost:19090 |
Las credenciales incluidas en este repositorio son valores predeterminados intencionales para fines docentes. No deben reutilizarse para proteger servicios reales ni despliegues expuestos a Internet. En entornos externos al laboratorio, reemplácelas mediante variables de entorno antes de iniciar los contenedores.
NiFi
Usuario: admin
Contraseña: NifiLab2026!Secure
Las credenciales pueden modificarse en hadoop-hive.env.
Hue
En el primer acceso puede solicitar la creación de una cuenta. Para el
laboratorio puede utilizar admin.
StreamSets
Usuario: admin
Contraseña: admin
Esta versión utiliza HTTPS. Docker publica el puerto 9999 del host
hacia el puerto HTTPS 8443 del contenedor.
La configuración utiliza:
NIFI_WEB_HTTPS_HOST=0.0.0.0
NIFI_WEB_PROXY_HOST=${NIFI_PROXY_HOST}
Puede comprobar el acceso local mediante:
curl -k -I https://localhost:9999/nifi/Una configuración correcta debería responder con:
HTTP/2 200
El navegador puede advertir que el certificado no es de confianza debido al certificado autofirmado utilizado en el entorno de laboratorio.
Puede ejecutar comandos HDFS desde el NameNode:
sudo docker exec -it namenode bashEjemplos:
hdfs dfs -ls /
hdfs dfs -mkdir -p /curso/datos
hdfs dfs -ls /cursoRecuerde que el filesystem Linux del contenedor y HDFS son espacios diferentes:
ls /
consulta el filesystem Linux, mientras que:
hdfs dfs -ls /
consulta HDFS.
Ingrese al contenedor:
sudo docker exec -it hive-server bashLuego:
cd /opt/hive/bin
./hiveEjemplos:
SHOW DATABASES;
SHOW TABLES;Hive utiliza HDFS para almacenar los datos y el Hive Metastore para conservar la definición de bases de datos, tablas, columnas, tipos y ubicaciones.
En esta versión el Metastore utiliza PostgreSQL con almacenamiento persistente.
Ingrese al contenedor:
sudo docker exec -it database bashLuego:
mysql -h localhost -u root -pContraseña:
secret
Ingrese al Spark Master:
sudo docker exec -it spark-master bashLuego:
cd /spark/bin
./spark-shellIngrese al Spark Master:
sudo docker exec -it spark-master bashLuego:
cd /spark/bin
./pysparkIngrese al contenedor:
sudo docker exec -it kafka bashLuego:
cd /usr/local/binEjemplos básicos del entorno:
./kafka-topics --create --zookeeper zookeeper:2181 \
--replication-factor 1 --partitions 1 --topic EJEMPLO
./kafka-topics --list --zookeeper zookeeper:2181
./kafka-console-producer \
--broker-list localhost:9092 \
--topic EJEMPLO
./kafka-console-consumer \
--bootstrap-server localhost:9092 \
--from-beginning \
--topic EJEMPLOPuede crear un archivo de prueba en HDFS:
sudo docker exec namenode \
hdfs dfs -mkdir -p /prueba_persistencia
sudo docker exec namenode \
sh -c 'echo "Este archivo debe sobrevivir a la recreación de los contenedores" > /tmp/persistencia.txt'
sudo docker exec namenode \
hdfs dfs -put /tmp/persistencia.txt /prueba_persistencia/Compruébelo:
sudo docker exec namenode \
hdfs dfs -cat /prueba_persistencia/persistencia.txtDespués de ejecutar docker compose down y posteriormente up -d, el
archivo debería continuar disponible mientras los volúmenes persistentes
se conserven.
Al desplegar esta infraestructura en AWS:
- Configure
NIFI_PROXY_HOSTcon la IP pública o DNS de la instancia. - Habilite en el Security Group únicamente los puertos necesarios.
- Evite exponer indiscriminadamente todos los servicios a Internet.
- Recuerde que los volúmenes Docker siguen residiendo sobre el almacenamiento de la instancia.
- Detener/iniciar una instancia no equivale a terminarla y recrearla.
La persistencia de Docker no sustituye una estrategia de respaldo.
sudo docker ps -aEjemplo para NiFi:
sudo docker logs nifi --tail 50Ejemplo para Hive:
sudo docker logs hive-server --tail 50sudo docker volume lsVideo de apoyo:
Material complementario:
Docker Compose
│
┌──────────────────────┼──────────────────────┐
│ │ │
Hadoop/HDFS Hive Spark
│ │
┌─────┴─────┐ ┌──────┴─────────┐
│ │ │ │
NameNode DataNode HiveServer2 Hive Metastore
│
PostgreSQL
┌──────────────────────┬──────────────────────┐
│ │ │
Kafka ZooKeeper NiFi
┌──────────────────────┬──────────────────────┐
│ │ │
Hue Zeppelin StreamSets
If you use this infrastructure in research or technical work, please cite:
López-Núñez, J. (2026).
Hadoop Infrastructure for Big Data using Docker Compose (Version
2.0.0) [Software].
Zenodo. https://doi.org/10.5281/zenodo.22645069
For the repository as a whole and all versions, use the conceptual DOI: https://doi.org/10.5281/zenodo.18968437
This project is distributed under the GPL-2.0 license.
Blog de Julio López-Núñez:
https://juliopezblog.wordpress.com/