Cos'è MapReduce in Hadoop? ArchiStruttura e diagramma

⚡ Riepilogo intelligente

MapReduce è il modello di programmazione di Hadoop che trasforma un dataset di grandi dimensioni in un risultato di dimensioni ridotte eseguendo una funzione map su ogni suddivisione dell'input e successivamente una funzione reduce sui valori intermedi raggruppati.

  • 🔘 Quattro fasi: Ogni lavoro viene eseguito come suddivisione, mappaping, mescolando e riducendo, con coppie chiave-valore che fluiscono tra ogni fase.
  • ☑️ Esempio pratico: Tre righe di testo diventano sette parole, mostrando esattamente il contributo di ciascuna fase.
  • Dimensioni divise: Per ogni suddivisione dell'input viene eseguita un'attività di mappatura e la dimensione della suddivisione corrisponde normalmente alla dimensione del blocco HDFS.
  • 🧪 Dati intermedi: L'output della mappa viene scritto su disco locale anziché su HDFS, perché replicare dati non necessari è uno spreco.
  • Coordinazione: Un lavoroTracker pianifica il lavoro e l'attivitàTracI bambini segnalano i progressi attraverso segnali periodici del battito cardiaco.
  • ⚠️ Nota sulla versione: YARN ha sostituito quella coppia con un ResourceManager, dei NodeManager e un ApplicationMaster per ogni job, ereditati da Hadoop 2.x.

L'architettura di MapReduce in Hadoop spiegata con un esempio.

Cos'è MapReduce in Hadoop?

MapReduce è un framework software e un modello di programmazione utilizzato per elaborare enormi quantità di dati. I programmi MapReduce funzionano in due fasi, ovvero Map e Reduce. Le attività di Map si occupano della suddivisione e della mappatura.ping dei dati mentre le attività di riduzione mescolano e riducono i dati.

Hadoop è in grado di eseguire programmi MapReduce scritti in vari linguaggi: Java, Rubino, Pythone C++I programmi MapReduce sono intrinsecamente paralleli, pertanto risultano molto utili per eseguire analisi di dati su larga scala utilizzando più macchine in un cluster.

L'input di ciascuna fase è costituito da coppie chiave-valore. Inoltre, ogni programmatore deve specificare due funzioni: una funzione di mappatura e una funzione di riduzione.

MapReduce ArchiLa tecnologia dei Big Data spiegata con l'esempio

L'intero processo passa attraverso quattro fasi di esecuzione, vale a dire suddivisione, mappaturaping, mescolando e riducendo.

Ora, in questo tutorial su MapReduce, cerchiamo di comprenderlo meglio attraverso un esempio pratico.

Supponiamo di avere i seguenti dati di input per il tuo MapReduce in Big Data programma:

Welcome to Hadoop Class
Hadoop is good
Hadoop is bad

Il diagramma sottostante tracQueste tre linee attraversano ogni fase, dalle suddivisioni di input a sinistra al conteggio finale delle parole a destra.

Diagramma dell'architettura MapReduce tractre linee di input attraverso la suddivisione, mappaping, mescolando e riducendo

L'output finale dell'attività MapReduce è

male 1
Classe 1
buono 1
Hadoop 3
is 2
a 1
Welcome 1

Nell'ambito dei Big Data, i dati attraversano le seguenti fasi di MapReduce.

Divisioni di ingresso

L'input di un job MapReduce in Big Data viene suddiviso in parti di dimensioni fisse chiamate input split. Un input split è una porzione dell'input che viene elaborata da una singola operazione di map.

Mappaping

Questa è la primissima fase nell'esecuzione di un programma MapReduce. In questa fase, i dati in ogni split vengono passati a una mappaping funzione per produrre valori di output. Nel nostro esempio, il compito della mappaping la fase consiste nel contare il numero di occorrenze di ciascuna parola dalle suddivisioni di input (maggiori dettagli sulle suddivisioni di input sono forniti di seguito) e preparare un elenco nella forma di .

Mischiare le carte

Questa fase consuma l'output della mappaping fase. Il suo compito è consolidare i record rilevanti dalla mappaping Uscita di fase. Nel nostro esempio, le stesse parole sono raggruppate insieme alla rispettiva frequenza.

Ridurre

In questa fase, i valori di output della fase di rimescolamento vengono aggregati. Questa fase combina i valori della fase di rimescolamento e restituisce un singolo valore di output. In breve, questa fase riassume l'intero set di dati.

Nel nostro esempio, questa fase aggrega i valori della fase di mescolamento, ovvero calcola il numero totale di occorrenze di ciascuna parola.

MapReduce Archistruttura spiegata in dettaglio

I punti seguenti spiegano come le suddivisioni, le attività di mappatura e le attività di riduzione vengono effettivamente posizionate e memorizzate all'interno del cluster.

  • Per ogni suddivisione viene creata un'attività di mappatura, che esegue poi la funzione di mappatura per ogni record presente nella suddivisione.
  • È sempre vantaggioso avere più suddivisioni perché il tempo necessario per elaborare una suddivisione è ridotto rispetto al tempo necessario per elaborare l'intero input. Quando le suddivisioni sono più piccole, il carico di elaborazione è meglio bilanciato, poiché le suddivisioni vengono elaborate in parallelo.
  • Tuttavia, non è auspicabile avere suddivisioni troppo piccole. Quando le suddivisioni sono troppo piccole, il sovraccarico dovuto alla gestione delle suddivisioni e alla creazione delle attività di mappatura inizia a prevalere sul tempo totale di esecuzione del lavoro.
  • Per la maggior parte dei lavori, è meglio rendere la dimensione della divisione uguale alla dimensione di un HDFS blocco, che per impostazione predefinita è di 128 MB da Hadoop 2.x in poi (era di 64 MB in Hadoop 1.x) ed è controllato da dfs.blocksize proprietà.
  • L'esecuzione delle attività di mappatura comporta la scrittura dell'output su un disco locale sul rispettivo nodo, e non su HDFS.
  • Il motivo per cui si preferisce un disco locale a HDFS è quello di evitare la replica che si verifica durante un'operazione di archiviazione su HDFS.
  • L'output della mappa è un output intermedio che viene elaborato riducendo le attività per produrre l'output finale.
  • Una volta completato il lavoro, l'output della mappa può essere buttato via. Pertanto, archiviarlo in HDFS con la replica diventa eccessivo.
  • In caso di guasto del nodo, prima che l'output della mappa venga consumato dall'attività di riduzione, Hadoop esegue nuovamente l'attività della mappa su un altro nodo e ricrea l'output della mappa.
  • Le attività di riduzione non si basano sul concetto di località dei dati. L'output di ogni attività di mappatura viene passato all'attività di riduzione. L'output della mappatura viene trasferito alla macchina su cui è in esecuzione l'attività di riduzione.
  • Su questa macchina, l'output viene unito e quindi passato alla funzione di riduzione definita dall'utente.
  • A differenza dell'output della mappa, l'output della riduzione viene memorizzato in HDFS (la prima replica è memorizzata sul nodo locale e le altre repliche su nodi esterni al rack). Pertanto, la scrittura dell'output della riduzione consuma larghezza di banda di rete, ma solo nella stessa misura di una normale pipeline di scrittura HDFS.

Come MapReduce organizza il lavoro?

In questo tutorial su MapReduce, impareremo come funziona MapReduce.

Hadoop suddivide il lavoro in attività. Esistono due tipi di attività:

  1. Attività di mappatura (divisioni e mappatura)ping)
  2. Ridurre i compiti (Riorganizzazione, Riduzione)

L'intero processo di esecuzione, ossia l'esecuzione di entrambe le attività Map e Reduce, è controllato da due tipi di entità chiamate:

  1. LavoroTracker: agisce come un master ed è responsabile della completa esecuzione di un lavoro inviato.
  2. Attività multipleTrackers: si comportano come schiavi, ognuno di loro svolgendo una parte del lavoro.

Per ogni lavoro inviato per l'esecuzione nel sistema, c'è un lavoroTracker che risiede sul NameNode e ci sono più attivitàTracker che risiedono sui DataNode.

Nota: il professionistaTracker e TaskTracLa coppia ker appartiene alla versione 1 di MapReduce (Hadoop 1.x). A partire da Hadoop 2.x, YARN suddivide questi compiti tra un ResourceManager a livello di cluster, un NodeManager su ogni nodo e un ApplicationMaster per ogni job, sebbene le fasi di map, shuffle e reduce rimangano invariate.

Il diagramma seguente mostra come un lavoro inviato viene suddiviso in attività e traccollegato attraverso il cluster.

Diagramma che mostra un lavoro suddiviso in attività di mappatura e riduzione tracguidato dal lavoroTracker e TaskTrackers

  • Un lavoro viene suddiviso in più attività che vengono poi eseguite su più nodi dati in un cluster.
  • È responsabilità del lavoro tracker per coordinare l'attività pianificando l'esecuzione di attività su diversi nodi dati.
  • L'esecuzione di un singolo compito viene quindi gestita dal compito tracker, che risiede su ogni nodo dati che esegue parte del lavoro.
  • L'obiettivo tracLa responsabilità di ker è di inviare il rapporto di avanzamento al lavoro tracker.
  • Inoltre, il compito tracker invia periodicamente un segnale di "battito cardiaco" al lavoroTracker in modo da notificargli lo stato attuale del sistema.
  • Quindi il lavoro tracker mantiene track dell'avanzamento complessivo di ogni lavoro. In caso di errore del compito, il lavoro tracker può riprogrammarlo su un'attività diversa tracker.

DOMANDE FREQUENTI

YARN lo faceva, a partire da Hadoop 2.x. Un ResourceManager a livello di cluster gestisce la pianificazione, un NodeManager viene eseguito su ciascun nodo e un ApplicationMaster per ogni job. tracks i suoi compiti. Le fasi di mappatura e riduzione rimangono invariate.

I modelli addestrati sulla cronologia dei lavori precedenti prevedono i tempi di esecuzione, raccomandano le dimensioni degli split e il numero di reducer e rilevano tempestivamente le anomalie. Monitorano inoltre i valori dei contatori, segnalando i lavori insolitamente lenti o fallimentari prima che l'esecuzione termini.

Copilot gestisce bene lo scaffolding: firme di mapper e reducer, generici, importazioni e chiamate di configurazione del driver. Decisioni sullo schema, come ad esempio quale campo è il gruppoping La chiave è che serve ancora uno sviluppatore che conosca i dati.

Un punto di partenza comune è un numero di slot di riduzione leggermente inferiore a quello disponibile, in modo che ogni reducer venga eseguito in un'unica ondata. Un numero insufficiente crea code lunghe; un numero eccessivo produce molti file di output di piccole dimensioni.

Un combiner è un mini-reducer opzionale che opera sull'output della mappa prima che attraversi la rete. Riduce drasticamente il traffico di shuffle, ma può essere utilizzato solo quando l'operazione di riduzione è sia associativa che commutativa.

Spark Mantiene i risultati intermedi in memoria ed esprime un lavoro come un grafo orientato di fasi, mentre MapReduce scrive l'output intermedio su disco tra le fasi. Spark è quindi molto più veloce per il lavoro iterativo.

Il partizionatore decide quale reducer riceve ogni chiave intermedia, calcolando di default l'hash della chiave modulo il numero di reducer. Viene generato un hash personalizzato quando tale hash lascia un singolo reducer sovraccarico.

Hadoop crea un task di mappatura per ogni suddivisione dell'input, e una suddivisione è un intervallo di byte anziché un intero file. Un file di grandi dimensioni produce molte suddivisioni; molti file di piccole dimensioni producono task di mappatura minuscoli e inefficienti.

Riassumi questo post con: