Projecte 7 — EnvasBlanes
| Camp | Valor |
|---|---|
| Empresa | EnvasBlanes (fabricant d'envasos de plàstic reciclat, polígon industrial de Blanes) |
| Sector | Fabricació industrial / IoT |
| Nivell | Sènior — volum extrem: arquitectura IoT a EnvasBlanes |
| Durada estimada | 8-9 hores |
| Blocs relacionats | Bloc 4 (arquitectura, particionament, formats de taula), Bloc 5 (qualitat i alertes) |
Context
EnvasBlanes fabrica envasos de plàstic reciclat per a la indústria alimentària des del polígon industrial de Blanes. Les seves 6 línies de producció tenen desenes de sensors cadascuna (temperatura, pressió, vibració, velocitat de la cinta) que emeten lectures diverses vegades per segon. Amb totes les línies funcionant a ple rendiment, la fàbrica genera al voltant de 10 milions d'events de sensor per hora. A aquesta escala, els enfocaments dels projectes anteriors (una taula PostgreSQL, un DAG d'Airflow senzill) deixen de ser viables.
Dia 1 — Dimensionar el problema
{"id_sensor": "L3-TEMP-07", "id_linia": "L3", "tipus": "temperatura", "valor": 187.4, "unitat": "celsius", "timestamp": "2026-06-15T09:14:03.221Z"}
Tasca: amb 6 línies, 40 sensors per línia i una lectura cada 200 mil·lisegons per sensor, calcula el nombre d'events per hora i comprova que coincideix aproximadament amb els 10 milions esmentats. Explica per què, a aquest volum, escriure cada lectura com una fila individual a una base de dades relacional (com les del Bloc 2) no és una opció viable, i per què cal un motor de processament distribuït.
Dataset
Amb 10 milions d'events/hora és impossible repartir un fitxer amb tota la fàbrica; se't dona una mostra real de 2 minuts amb 4 sensors per línia (temperatura, pressió, vibració i velocitat de cinta), 6 línies:
| Fitxer | Contingut | Files |
|---|---|---|
lectures_sensors_mostra.jsonl |
Lectures de 24 sensors durant 2 minuts a 200ms d'interval. El sensor L3-TEMP-07 té una deriva anòmala injectada als últims 20 segons (útil per al Dia 4) |
14.400 |
Dia 2 — Finestres d'agregació amb Spark Streaming
No té sentit analitzar lectura per lectura: cal agregar-les en finestres temporals (per exemple, la mitjana de temperatura de cada sensor cada 10 segons).
Tasca: en pseudocodi (o codi real de PySpark si el coneixes), descriu una operació d'agregació en finestra (windowed aggregation) que calculi, per a cada sensor i finestra de 10 segons: valor mitjà, valor màxim i valor mínim. Explica la diferència entre una finestra tumbling (finestres fixes que no se solapen) i una finestra sliding (que se solapen), i quina triaries per detectar una pujada sobtada de temperatura.
Dia 3 — Emmagatzematge amb Apache Iceberg a escala
Tasca: dissenya l'esquema de particionament d'una taula Iceberg bronze.lectures_sensors per a aquest volum de dades, prenent les decisions següents:
- Per quina(es) columna(es) particionaries (temps? línia? tipus de sensor?), tenint en compte el small file problem vist al Bloc 4.
- Justifica si faries servir mode merge-on-read o copy-on-write (Bloc 4) per a les escriptures contínues d'aquest pipeline, sabent que és pràcticament tot escriptura (ingesta contínua) i poca reescriptura de dades històriques.
- Explica quin avantatge dona el partition evolution d'Iceberg si, d'aquí a un any, EnvasBlanes afegeix una setena línia de producció amb un patró d'ús diferent.
Dia 4 — Alertes predictives
L'equip de manteniment vol passar de "reaccionar quan una màquina ja s'ha espatllat" a "predir que es trencarà abans que passi".
Tasca: proposa una regla d'alerta basada en llindars dinàmics (com les vistes al Bloc 5): si la temperatura mitjana d'un sensor a la finestra actual supera en X desviacions estàndard la mitjana de les últimes 24 hores d'aquell mateix sensor, es genera una alerta de manteniment preventiu. Explica per què el llindar ha de calcular-se per sensor individual i no amb un únic llindar global per a tota la fàbrica (pensa en si totes les línies produeixen exactament el mateix tipus d'envàs a la mateixa velocitat). Aplica la teva regla sobre lectures_sensors_mostra.jsonl (per exemple, amb finestres de 5 segons) i comprova en quin moment exacte s'hauria disparat l'alerta per al sensor L3-TEMP-07.
Lliurament
- Càlcul del volum d'events i justificació de l'arquitectura (Dia 1).
- Disseny de l'agregació en finestres (Dia 2).
- Esquema de particionament i tria merge-on-read/copy-on-write (Dia 3).
- Disseny de la regla d'alerta predictiva (Dia 4).
Mòdul M5074 Sistemes de Big Data | Institut Sa Palomera (Blanes) | Curs CEIABD 2026-2027