Prueba de concepto completa de MapReduce con Hadoop usando Java, totalmente containerizada con Docker Compose. El sistema incluye:
- Cliente Web: Genera y envía logs de interacciones
- MinIO: Almacenamiento compatible con S3
- Hadoop Cluster: NameNode, ResourceManager y DataNodes escalables
- MapReduce Job: Procesa y analiza los logs
- Docker Desktop (Windows/Mac/Linux)
- Docker Compose v2+
- 8GB RAM mínimo
- 10GB espacio en disco
-
Clonar o crear la estructura del proyecto
-
Iniciar el cluster completo:
docker-compose up -d- Verificar que todos los servicios están funcionando:
docker-compose ps- Acceder a las interfaces web:
- Cliente Web: http://localhost:3000
- MinIO Console: http://localhost:9001 (admin/minioadmin123)
- Hadoop NameNode: http://localhost:9870
- YARN ResourceManager: http://localhost:8088
- Abrir http://localhost:3000
- Usar los botones para:
- Iniciar tracking automático
- Generar logs de prueba
- Interactuar con los elementos
# Generar 500 logs de prueba
curl -X POST http://localhost:3000/api/generate-test-logs \
-H "Content-Type: application/json" \
-d '{"count": 500}'El JAR se compila automáticamente al iniciar, pero si necesitas recompilar:
docker-compose run --rm mapreduce-compiler mvn clean packagedocker-compose exec job-runner bash /scripts/run-job.sh hdfsdocker-compose exec job-runner bash /scripts/run-job.sh s3docker-compose exec job-runner bash /scripts/run-job.sh demodocker-compose exec job-runner bash /scripts/run-job.sh hdfs -r 4# Escalar a 5 workers
docker-compose exec job-runner bash /scripts/scale-workers.sh 5
# O directamente con docker-compose
docker-compose up -d --scale datanode=5docker-compose ps | grep datanodedocker-compose logs -f job-runnerdocker-compose exec job-runner hdfs dfs -ls /output/
docker-compose exec job-runner hdfs dfs -cat /output/*/part-r-00000- Ir a http://localhost:9001
- Login: minioadmin / minioadmin123
- Navegar al bucket "output"
mapreduce-hadoop-poc/
├── docker-compose.yml # Orquestación de contenedores
├── .env # Variables de entorno
├── hadoop/ # Configuración de Hadoop
│ ├── Dockerfile
│ ├── config/*.xml # Configuraciones Hadoop
│ └── entrypoint.sh
├── web-client/ # Aplicación generadora de logs
│ ├── server.js
│ └── public/index.html
├── mapreduce-job/ # Job MapReduce en Java
│ ├── pom.xml
│ └── src/main/java/...
└── scripts/ # Scripts de utilidad
├── run-job.sh
└── scale-workers.sh
# Iniciar todo
docker-compose up -d
# Detener todo
docker-compose down
# Ver logs de un servicio
docker-compose logs -f [servicio]
# Reiniciar un servicio
docker-compose restart [servicio]
# Limpiar todo (incluyendo volúmenes)
docker-compose down -v# Listar archivos
docker-compose exec job-runner hdfs dfs -ls /
# Crear directorio
docker-compose exec job-runner hdfs dfs -mkdir /test
# Copiar archivo local a HDFS
docker-compose exec job-runner hdfs dfs -put /local/file /hdfs/path
# Ver contenido de archivo
docker-compose exec job-runner hdfs dfs -cat /path/to/file# Listar buckets
docker-compose exec job-runner aws --endpoint-url=http://minio:9000 s3 ls
# Listar contenido de bucket
docker-compose exec job-runner aws --endpoint-url=http://minio:9000 s3 ls s3://logs/
# Descargar archivo
docker-compose exec job-runner aws --endpoint-url=http://minio:9000 s3 cp s3://logs/file.json /tmp/Editar .env:
YARN_MEMORY_MB=4096
YARN_VCORES=4Editar hadoop/config/hdfs-site.xml:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>El job procesa los logs y genera estadísticas sobre:
- Acciones realizadas por los usuarios
- Páginas más visitadas
- Distribución por hora del día
- Sesiones únicas
- Combinaciones acción-página
- Verificar que hay logs en MinIO: http://localhost:9001
- Generar logs desde http://localhost:3000
- Aumentar memoria Docker Desktop
- Reducir número de workers
- Ajustar YARN_MEMORY_MB en .env
# Ver logs detallados
docker-compose logs [servicio]
# Reiniciar desde cero
docker-compose down -v
docker-compose up -d# Recompilar el JAR
docker-compose run --rm mapreduce-compiler mvn clean package- El sistema está optimizado para desarrollo/testing
- Los datos persisten en volúmenes Docker
- El cluster se auto-configura al iniciar
- No requiere Java instalado en el host
- Compatible con Windows, Mac y Linux
- Análisis de logs en tiempo real
- Procesamiento batch de eventos
- Agregación de métricas
- Demo de escalabilidad Hadoop
- Testing de jobs MapReduce
Para verificar que todo está funcionando:
# Verificar servicios
docker-compose exec job-runner bash -c "
echo 'Verificando servicios...'
nc -zv namenode 9870 && echo '✓ NameNode OK'
nc -zv resourcemanager 8088 && echo '✓ ResourceManager OK'
nc -zv minio 9000 && echo '✓ MinIO OK'
nc -zv web-client 3000 && echo '✓ Web Client OK'
"Desarrollado como POC de MapReduce con Hadoop en Docker