Riduci mappa era un modello introdotto da Google come metodo per risolvere una classe di problemi relativi ai Big Data con grandi gruppi di macchine poco costose. Hadoop assorbe questo modello nel cuore del suo processo di lavoro. Questo articolo fornisce un'idea introduttiva del modello MapReduce utilizzato da Hadoop per risolvere il problema dei Big Data.
Panoramica
Una tipica applicazione Big Data si occupa di un ampio set di dati scalabili. L'utilizzo di un unico database per l'archiviazione e il recupero può rappresentare un importante collo di bottiglia nell'elaborazione. Ciò è particolarmente vero se utilizziamo un database monolitico per archiviare un'enorme quantità di dati come possiamo vedere con i database relazionali e come vengono utilizzati come un unico repository. Questo non funzionerà, in particolare abbiamo a che fare con grandi set di dati in un ambiente distribuito.
Google ha utilizzato l'algoritmo MapReduce per affrontare la situazione e ha trovato una soluzione. L'idea è quella di dividere l'attività più grande in parti più piccole gestibili e distribuirle tra i computer nella rete per l'elaborazione. Il risultato così ottenuto viene integrato per formare il dataset finale. Questa idea è diventata la base del progetto Hadoop di Doug Cutting. Hadoop utilizza questo algoritmo per elaborare i dati in parallelo con altri per fornire un'analisi statistica completa su grandi set di dati. Pertanto, Hadoop grossolanamente può essere diviso in due parti:
- Elaborazione: Sfruttato dall'algoritmo MapReduce
- Archiviazione: Sfruttato da HDFS
Hadoop MapReduce è quindi un'implementazione dell'algoritmo sviluppato e mantenuto dal progetto Apache Hadoop. Funziona come una macchina in sé in cui forniamo input e il motore risponde trasformando l'input in output in modo rapido ed efficiente, elaborando più fasi. Questa idea apertamente semplicistica necessita di una piccola elaborazione in quanto segue la linea.
Riduci mappa
MapReduce è un modello di programmazione parallela utilizzato per l'elaborazione rapida dei dati in un ambiente applicativo distribuito. Funziona su set di dati (multi terabyte di dati) distribuiti su cluster (migliaia di nodi) nella rete hardware di base. I programmi MapReduce vengono eseguiti su Hadoop e possono essere scritti in più linguaggi:Java, C++, Python e Ruby. La caratteristica principale del programma MapReduce è che ha intrinsecamente assorbito lo spirito di parallelismo nei programmi. Ciò lo rende ideale per l'analisi dei dati su larga scala che può sfruttare il modello di parallelismo nella sua pratica per estrarre risultati in modo più efficiente e rapido da un'infrastruttura esistente.
Come funziona
Hadoop MapReduce divide le attività in più fasi, ciascuna con un insieme significativo di funzioni per estrarre il risultato desiderato dai Big Data. Funziona su nodi in un cluster ospitato su una raccolta di server di base. Il processo inizia con la richiesta dell'utente che esegue il motore MapReduce e termina con la memorizzazione del risultato in HDFS.
Possiamo avviare un processo MapReduce da eseguire richiamando il JobClient.runJob(conf) metodo. Questo è un metodo conveniente per creare un nuovo JobClient esempio. Questo a sua volta invoca submitJob() ed esegue il polling dell'avanzamento del lavoro ogni secondo e segnala alla console se sono state apportate modifiche dall'ultimo rapporto che è stato generato. Questo ha un effetto a catena e attiva una serie di operazioni dietro le quinte. Il primo passo è trovare e leggere il file di input che contiene i dati grezzi. Il formato del file è arbitrario e deve essere convertito in un formato idoneo per l'elaborazione. Questo è il lavoro per InputFormat e il RecordReader(RR) . Il Formato Input usa la funzione chiamata InputSplit per dividere il file in parti più piccole. Il RecorReader(RR) quindi trasforma i dati grezzi e li rende disponibili per l'elaborazione da mappa .
Mappatura
Una volta che i dati sono accettabili per la mappatura, crea un'istanza distinta per ciascuna coppia di input (chiave e valore) e avvia l'elaborazione. Non appena la funzione di mappatura inizia a produrre output, non viene scritta direttamente sul disco; invece, viene archiviato nel buffer di memoria per eseguire il preordinamento. Ogni mappa mantiene un buffer circolare in cui reindirizza l'output. Al superamento della dimensione soglia, il contenuto fuoriuscito viene riscritto sul disco. Divide ulteriormente i dati in partizioni accettabili per il riduttore a cui i dati vengono reindirizzati successivamente. Tutti questi lavori, tuttavia, si svolgono in modo simultaneo su più nodi nel cluster Hadoop. Dopo aver completato le attività della mappa, i risultati intermedi vengono accumulati nella partizione e vengono eseguiti lo shuffle e l'ordinamento per ottimizzare l'output in modo che la riduzione subentri come input.
Riduci e unisci
Ciò che reduce ottiene è anche una coppia chiave, valore e agisce in modo simile alla mappa. Raccoglie l'output della mappa da diverse attività della mappa nel cluster e inizia l'elaborazione solo dopo il completamento della mappatura. Ha una serie di thread della fotocopiatrice per unire e trasferire sul disco l'output fornito dalla mappa. Man mano che le copie vengono accumulate sul disco, un thread in background fa il lavoro di unirle in file più grandi e ordinati. Fornisce inoltre l'output sotto forma di chiave, coppia di valori e potrebbe essere necessario riformattarlo da OutputFormat prima che la domanda possa accettare il formato. Il Formato Output infine prende la chiave, la coppia di valori e riscrive i dati elaborati su HDFS. Qui, RecordWriter svolge il ruolo principale, proprio come RecordReader , tranne per il fatto che all'inizio interviene durante la lettura da HDFS.
Conclusione
Questa è solo la punta dell'iceberg. Ci sono molti dettagli intricati e molto altro accade dietro le quinte. In breve, Hadoop MapReduce offre le capacità per suddividere i Big Data in parti più piccole e gestibili, elaborarli in parallelo su un cluster distribuito e, infine, rendere i dati disponibili per il consumo o l'elaborazione aggiuntiva. Hadoop oggi è cresciuto fino a diventare un ecosistema più ampio di strumenti e tecnologie per risolvere i problemi dei Big Data e si sta evolvendo rapidamente per perfezionarne le funzionalità.