Fundamentos de Big Data
"No tenés un problema de Big Data hasta que tu base de datos relacional empieza a fallarte. Si todavía corre bien, no usés Hadoop."
Qué vas a aprender en este capítulo
Antes de aprender Spark o Kafka, necesitamos entender el problema: ¿cuándo los datos son "grandes"? ¿Por qué las herramientas tradicionales no alcanzan? ¿Cuál es el panorama de tecnologías que existen?
1.1 ¿Cuándo es Big Data?
💡 Intuición
"Big Data" es relativo. 100 GB era enorme en 2005, hoy cabe en un SSD de tu laptop. La regla práctica: es Big Data cuando tu herramienta tradicional ya no alcanza.
- ¿PostgreSQL responde queries en > 30 segundos? Big Data territory.
- ¿Tu CSV no entra en la RAM? Big Data territory.
- ¿Necesitás procesar terabytes en horas? Definitivamente.
📐 Fundamento
Las 5 V's:
- Volumen — TB, PB, EB de datos.
- Velocidad — datos llegando en tiempo real.
- Variedad — estructurados, semi-estructurados, no estructurados.
- Veracidad — calidad y confiabilidad.
- Valor — capacidad de extraer insights.
OLTP vs OLAP — la distinción fundamental:
| OLTP | OLAP | |
|---|---|---|
| Online Transaction Processing | Online Analytical Processing | |
| Operaciones del día a día | Análisis y reportes | |
| Insertar pedidos, actualizar inventario | Reportes de ventas anuales, predicciones | |
| Pocas filas por query | Millones de filas por query | |
| Optimizado para writes/reads rápidos | Optimizado para agregaciones | |
| Normalizado (3FN) | Desnormalizado (star schema) | |
| PostgreSQL, MySQL | BigQuery, Snowflake, Redshift | |
| Latencia: ms | Latencia: segundos-minutos |
No mezclar: correr un reporte analítico (que escanea millones de filas) sobre la BD de producción puede ralentizar las operaciones. Por eso se separan.
Escalado vertical vs horizontal:
- Vertical (scale up): servidor más grande. Limitado físicamente, costoso.
- Horizontal (scale out): muchos servidores. Casi infinito, complejo.
Vertical: Horizontal:
┌──────────┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐
│ GIGA │ vs ├──┤ ├──┤ ├──┤ ├──┤
│ SERVER │ │__│ │__│ │__│ │__│
└──────────┘ commodity hardware
costoso, límite físico más complejo, escala infinita
Big Data es escalado horizontal — distribuir datos y cómputo entre muchos nodos.
1.2 El ecosistema moderno de datos
📐 Fundamento
┌─────────────────────────────────────────────────────┐
│ Sources (orígenes) │
│ Apps, APIs, IoT, BD operativas, archivos, logs │
└──────────────────────┬──────────────────────────────┘
│ (ingesta)
▼
┌─────────────────────────────────────────────────────┐
│ Streaming (Kafka, Kinesis, Pub/Sub) │
│ Batch (Airflow, Fivetran, Airbyte) │
└──────────────────────┬──────────────────────────────┘
│
┌──────────┴──────────┐
▼ ▼
┌──────────────┐ ┌──────────────┐
│ Data Lake │ │ Data Warehouse│
│ (S3, GCS) │ ←── │ (BigQuery, │
│ Raw, JSON, │ │ Snowflake) │
│ Parquet │ │ Estructurado │
└──────────────┘ └──────────────┘
│ │
▼ ▼
┌──────────────────────────────────┐
│ Procesamiento (Spark, dbt) │
└──────────────────────────────────┘
│
▼
┌──────────────────────────────────┐
│ Consumo │
│ - BI: Tableau, Looker, Metabase│
│ - ML: notebooks, training │
│ - Apps: APIs analíticas │
└──────────────────────────────────┘
Roles típicos en un equipo de datos:
- Data Engineer: construye los pipelines (ingesta, transformación, almacenamiento).
- Analytics Engineer: modela datos para análisis (dbt).
- Data Analyst: crea dashboards y reportes (SQL, BI tools).
- Data Scientist: ML, predicciones, modelos.
- MLOps Engineer: despliegue y monitoreo de modelos en producción.
Modern data stack típico:
| Capa | Herramientas comunes |
|---|---|
| Ingesta | Fivetran, Airbyte, Stitch, Kafka |
| Almacenamiento | S3, BigQuery, Snowflake |
| Transformación | dbt, Spark |
| Orquestación | Airflow, Prefect, Dagster |
| BI | Looker, Tableau, Metabase, Superset |
| ML | Databricks, SageMaker, Vertex AI |
| Observabilidad | Monte Carlo, Datadog |
1.3 Data Lake, Data Warehouse y Data Mart
📐 Fundamento
Data Lake: almacén de datos en bruto, sin estructura forzada.
- Storage barato (S3, GCS).
- Cualquier formato (CSV, JSON, Parquet, imágenes, videos).
- Schema-on-read: la estructura se aplica al consumir.
- Ideal para datos exploratorios, ML, archivos.
Data Warehouse: datos estructurados, modelados para análisis.
- Schema-on-write: estructura forzada al ingestar.
- Optimizado para queries analíticas (columnar storage).
- Modelado dimensional (star schema).
- Ej: BigQuery, Snowflake, Redshift.
Data Mart: subset de un data warehouse para un dominio específico.
- Marketing tiene su mart, Finanzas otro.
- Más rápido de consultar, menos datos.
Lakehouse (concepto moderno): combina lo mejor de los dos.
- Usa data lake como storage barato.
- Agrega capa de metadata (Delta Lake, Iceberg, Hudi) para queries SQL eficientes.
- Plataformas: Databricks, Apache Iceberg.
Modelo tradicional:
[Lake (raw)] → ETL → [Warehouse (modelado)] → [Marts]
Lakehouse moderno:
[Lake con metadata (Delta/Iceberg)] ← funciona para todo
1.4 Formatos de archivo para Big Data
📐 Fundamento
CSV/JSON: legibles, pero ineficientes para análisis (texto, sin compresión).
Formatos columnares (estándares en Big Data):
| Formato | Características |
|---|---|
| Parquet | Columnar, compresión, schema embedded. Estándar de facto |
| ORC | Similar a Parquet, optimizado para Hive |
| Avro | Row-based, ideal para streaming (Kafka), schema evolution |
¿Por qué columnar es mejor para análisis?
Query: SELECT AVG(precio) FROM ventas WHERE fecha = '2026-05-01'
CSV (row-based):
fila1: id, fecha, producto, precio, vendedor, ... ← lee todo
fila2: id, fecha, producto, precio, vendedor, ...
...
Parquet (column-based):
columna fecha: [valores...] ← lee solo esto para filtrar
columna precio: [valores...] ← y esto para promediar
(ignora las otras columnas)
Resultado: 10x menos datos leídos del disco.
Compresión:
import pandas as pd
# CSV típico: 1 GB
df = pd.read_csv('ventas.csv')
# Parquet con compresión Snappy: ~150 MB (6x más pequeño)
df.to_parquet('ventas.parquet', compression='snappy')
# Leer solo las columnas necesarias
df_filtrado = pd.read_parquet('ventas.parquet', columns=['fecha', 'precio'])
Particionamiento:
Organizar archivos en directorios por valor permite saltar particiones enteras al leer.
s3://la-esquina/ventas/
├── año=2026/
│ ├── mes=01/
│ │ ├── parte-0001.parquet
│ │ └── parte-0002.parquet
│ ├── mes=02/
│ └── ...
└── año=2025/
└── ...
Query: SELECT * FROM ventas WHERE año = 2026 AND mes = 01
→ Solo lee s3://la-esquina/ventas/año=2026/mes=01/
🛠️ En la práctica
La Esquina Cloud — arquitectura de datos:
[Apps backend] → escriben en PostgreSQL (OLTP)
│
│ CDC (Change Data Capture) con Debezium
▼
[Kafka topics]
│
┌──────────┼──────────┐
▼ ▼
[Spark Streaming] [Airbyte → BigQuery]
(procesamiento (ingesta a warehouse
en tiempo real) cada 5 min)
│ │
▼ ▼
[Alertas en vivo] [Dashboards Metabase]
[Notebooks análisis]
S3 / GCS:
- Logs raw (JSON)
- Imágenes
- Backups históricos en Parquet
Volumen estimado:
- 100K pedidos/día × 365 = 36.5 M pedidos/año.
- Promedio 200 bytes por pedido → ~7 GB/año en BD.
- Logs: 1 GB/día → 365 GB/año.
- Total: manejable con stack moderno (~$200/mes en cloud).
1.5 Ejercicios
✏️ Ejercicio 1.1 — OLTP vs OLAP
Para cada caso, decidí si es OLTP u OLAP y por qué:
a. Insertar un pedido nuevo en la app móvil. b. Reporte mensual: "Top 10 platillos más vendidos por categoría". c. Verificar el saldo de la cuenta antes de procesar un pago. d. Predicción de demanda para la próxima semana basada en histórico de 3 años.
Solución
a. OLTP — operación transaccional simple, pocas filas, latencia crítica.
b. OLAP — agregación sobre millones de filas, no necesita ser en tiempo real, puede tardar segundos.
c. OLTP — read-write transaccional, debe ser inmediato y consistente.
d. OLAP — análisis sobre big data histórico, alimenta un modelo ML.
1.6 Para profundizar
- Kleppmann, Designing Data-Intensive Applications — referencia obligada.
- Mark Beyer (Gartner), "3D Data Management" — origen de las 3 V's de Big Data.
- Modern Data Stack (moderndatastack.xyz).
- Siguiente: Hadoop y Spark.
Definiciones nuevas: Big Data, las 5 V's, OLTP, OLAP, escalado vertical/horizontal, data lake, data warehouse, data mart, lakehouse, Parquet, ORC, Avro, schema-on-read, schema-on-write, columnar storage, particionamiento, modern data stack, CDC.