Sobre el proyecto
E-Commerce Clickstream Analytics Platform es un proyecto full-stack de ingeniería de datos que procesa aproximadamente 285 millones de eventos de clickstream de comercio electrónico de un conjunto de datos de Kaggle que abarca octubre-noviembre de 2019.
## Resumen
La plataforma ingesta datos de eventos CSV crudos (~14 GB) en un almacén de objetos compatible con S3 (MinIO), ejecuta análisis por lotes mediante Apache Spark, realiza streaming en vivo a través de Kafka y Spark Structured Streaming, ejecuta trabajos Hadoop MapReduce y sirve resultados a través de un backend FastAPI hacia un dashboard frontend React.
## Componentes de Arquitectura
**Ingesta y Almacenamiento:**
- MinIO (almacenamiento de objetos compatible S3) conserva los CSV crudos y los resultados en formato Parquet
- PostgreSQL 16.3 almacena KPIs agregados y resultados listos para consultas
- Redis 7.4.1 proporciona la capa de caché
- Apache Kafka 3.9 (modo KRaft) actúa como bus de mensajería para datos en streaming
**Procesamiento:**
- Apache Spark 3.5 maneja ETL por lotes con cinco trabajos PySpark: cálculo diario de KPIs, análisis de embudo, detección de abandono del carrito, puntuación de afinidad de productos y preparación de datos para MapReduce
- Apache Hadoop 3.4.1 ejecutando YARN Streaming ejecuta dos trabajos MapReduce (conteo de eventos por categoría y agregación de ingresos por marca)
- Spark Structured Streaming consume desde Kafka, agregando sesiones activas cada 5 segundos e insertando o actualizando en PostgreSQL
**Orquestación y API:**
- Apache Airflow 2.9.3 orquesta todo el pipeline por lotes como un DAG
- FastAPI (con asyncpg) expone endpoints REST para el dashboard
- Plantillas de Terraform cubren despliegues en AWS y GCP
**Frontend:**
- React 18.3 con TypeScript, Tailwind CSS y Recharts renderiza cuatro páginas:
- Resumen: tarjetas de KPI y gráficos de tendencias diarias
- Análisis de Embudo: flujo de vista-carrito-compra y abandono por categoría
- Análisis de Productos: principales productos, marcas y categorías
- Monitor en Vivo: rastreo de sesiones en tiempo real vía Server-Sent Events
## Pipeline de Datos
1. **Análisis por lotes**: El CSV crudo se lee desde MinIO; las métricas diarias (eventos, usuarios, ingresos, tasa de conversión), productos/marcas/categorías más populares se calculan y escriben en PostgreSQL. Un trabajo separado calcula tasas de embudo por categoría, identifica el abandono del carrito y calcula puntuaciones de uplift de afinidad de productos (muestreado al 10% por rendimiento).
2. **MapReduce**: Los archivos Parquet preparados se convierten a CSV y se cargan en HDFS, donde los trabajos Hadoop Streaming cuentan eventos por categoría/tipo_evento y suman ingresos por marca.
3. **Streaming en vivo**: Un productor de Kafka replaya el CSV a una velocidad configurable (200 eventos/segundo por defecto). Un consumidor Spark Streaming agrega sesiones activas en micro-lotes de 5 segundos y los persiste en la tabla `live_sessions`.
## Despliegue
Las 13 servicios se ejecutan mediante Docker Compose. Los requisitos previos incluyen Docker Desktop >= 4.30 con al menos 16 GB de RAM y 30 GB de espacio en disco. Los usuarios de Windows requieren WSL2 con al menos 12 GB de memoria. El Makefile proporciona objetivos para iniciar servicios, cargar datos, ejecutar pipelines y ejecutar pruebas.
URLs de acceso después de iniciar: Dashboard (puerto 3000), documentación FastAPI (puerto 8000), Airflow (puerto 8080), MinIO Console (puerto 9001), Spark Master UI (puerto 8081), HDFS NameNode (puerto 9870) y YARN (puerto 8088).
## Estructura del Repositorio
Los directorios principales incluyen `spark/jobs/` para los cinco scripts batch PySpark, `spark/streaming/` para el consumidor Kafka, `kafka/producer/` para el productor de replay, `api/` para el servicio FastAPI con endpoints ruteados, `frontend/` para la aplicación React, `hadoop/mapreduce/` para scripts de trabajos streaming, `airflow/dags/` para orquestación, `terraform/` para plantillas IaC y `docker/` para definiciones de servicios Hadoop y Kafka.
Licencia: MIT
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.