Elaborazione dei dati su larga scala con MapReduce

Big data processing with MapReduce

Un’immersione profonda in MapReduce e parallelizzazione

Foto di Luca Nicoletti su Unsplash

Nel panorama attuale del mercato, le organizzazioni devono impegnarsi in processi decisionali basati sui dati per mantenere la competitività e favorire l’innovazione. Di conseguenza, ogni giorno viene raccolta una quantità immensa di dati.

Anche se la sfida della persistenza dei dati è stata in gran parte risolta, grazie alla diffusa disponibilità e convenienza dello storage cloud, le moderne organizzazioni continuano a lottare con l’elaborazione efficiente ed efficace di grandi quantità di dati.

Negli ultimi decenni sono emersi numerosi modelli di programmazione per affrontare la sfida dell’elaborazione di big data su larga scala. Indubbiamente, MapReduce si distingue come uno degli approcci più popolari ed efficaci.

Cos’è MapReduce

MapReduce è un framework di programmazione distribuita originariamente sviluppato da Google da Jeffrey Dean e Sanjay Ghemawat, nel 2004, ed è stato ispirato da concetti fondamentali della programmazione funzionale. La loro proposta prevedeva un modello di elaborazione parallela dei dati composto da due fasi: map e reduce.

In termini semplici, la fase di map consiste nella divisione dei dati originali in piccoli blocchi in modo che la logica di trasformazione possa essere applicata a singoli blocchi di dati. L’elaborazione dei dati può quindi essere applicata in parallelo ai blocchi creati e infine, la fase di reduce aggrega/consolida i blocchi elaborati e restituisce il risultato finale al chiamante.

Come funziona l’algoritmo MapReduce

Anche se l’algoritmo MapReduce è ampiamente conosciuto come un processo a due fasi, in realtà coinvolge tre fasi distinte.

1. Map: In questa prima fase, i dati vengono suddivisi in blocchi più piccoli e distribuiti su più nodi che fanno parte di un cluster di unità di elaborazione. Ogni blocco creato viene quindi assegnato a un mapper. L’input per il mapper è un insieme di coppie <chiave, valore>. Una volta eseguita l’elaborazione sui dati (che è nuovamente nella forma di <chiave, valore>), il mapper scriverà l’output risultante in uno storage temporaneo.

A titolo di esempio, consideriamo il seguente esempio in cui il testo di input viene prima suddiviso in tre…