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:

  1. Volumen — TB, PB, EB de datos.
  2. Velocidad — datos llegando en tiempo real.
  3. Variedad — estructurados, semi-estructurados, no estructurados.
  4. Veracidad — calidad y confiabilidad.
  5. 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.


1.6 Para profundizar


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.