Introducció a MapReduce
MapReduce és un model de programació i una plataforma de processament de dades massives desenvolupada per Google. És especialment útil per processar grans volums de dades de manera distribuïda i paral·lela. El model es basa en dos passos fonamentals: Map i Reduce.
Conceptes Clau
- Map: Aquest pas pren un conjunt de dades i el transforma en un altre conjunt de dades, on els elements individuals es descomponen en parelles clau-valor.
- Reduce: Aquest pas pren les sortides del pas Map i les combina en un conjunt més petit de parelles clau-valor.
Flux de Treball de MapReduce
- Entrada: Les dades d'entrada es divideixen en fragments més petits.
- Map: Cada fragment es processa per generar parelles clau-valor intermèdies.
- Shuffle and Sort: Les parelles clau-valor intermèdies es barregen i ordenen per clau.
- Reduce: Les parelles clau-valor ordenades es processen per generar la sortida final.
- Sortida: Les dades processades es guarden en un sistema d'emmagatzematge.
Exemple Pràctic
Problema: Comptar la freqüència de paraules en un conjunt de documents
Pas 1: Map
El pas Map llegeix cada document i emet una parella clau-valor per cada paraula, on la clau és la paraula i el valor és el número 1.
Pas 2: Shuffle and Sort
Les sortides del pas Map es barregen i ordenen per clau (paraula).
Pas 3: Reduce
El pas Reduce suma els valors per a cada clau (paraula) per obtenir el compte total de cada paraula.
Implementació en Hadoop
Hadoop és una plataforma que implementa el model MapReduce. A continuació es mostra un exemple de com implementar el comptador de paraules en Hadoop utilitzant Python.
Mapper
import sys # Input comes from standard input (stdin) for line in sys.stdin: # Remove leading and trailing whitespace line = line.strip() # Split the line into words words = line.split() # Increase counters for word in words: # Write the results to standard output print(f'{word}\t1')
Reducer
import sys current_word = None current_count = 0 word = None # Input comes from standard input (stdin) for line in sys.stdin: # Remove leading and trailing whitespace line = line.strip() # Parse the input we got from mapper.py word, count = line.split('\t', 1) # Convert count (currently a string) to int try: count = int(count) except ValueError: # Count was not a number, so silently ignore/discard this line continue # This IF-switch only works because Hadoop sorts map output # by key (here: word) before it is passed to the reducer if current_word == word: current_count += count else: if current_word: # Write result to standard output print(f'{current_word}\t{current_count}') current_count = count current_word = word # Do not forget to output the last word if needed! if current_word == word: print(f'{current_word}\t{current_count}')
Exercici Pràctic
Exercici 1: Comptar la Freqüència de Caràcters
Implementa una versió de MapReduce que compti la freqüència de cada caràcter en un conjunt de documents.
Solució
Mapper
Reducer
import sys current_char = None current_count = 0 char = None for line in sys.stdin: line = line.strip() char, count = line.split('\t', 1) try: count = int(count) except ValueError: continue if current_char == char: current_count += count else: if current_char: print(f'{current_char}\t{current_count}') current_count = count current_char = char if current_char == char: print(f'{current_char}\t{current_count}')
Errors Comuns i Consells
- No ordenar les sortides del Mapper: Assegura't que les sortides del Mapper estiguin ordenades per clau abans de passar-les al Reducer.
- No gestionar correctament les excepcions: Sempre gestiona les excepcions, especialment quan converteixes tipus de dades.
- No optimitzar el codi: Utilitza estructures de dades eficients i evita operacions innecessàries per millorar el rendiment.
Conclusió
MapReduce és una tècnica poderosa per processar grans volums de dades de manera distribuïda i paral·lela. Comprendre els passos fonamentals i saber implementar-los en plataformes com Hadoop és essencial per a qualsevol professional que treballi amb dades massives.
Processament de Dades Massives
Mòdul 1: Introducció al Processament de Dades Massives
Mòdul 2: Tecnologies d'Emmagatzematge
Mòdul 3: Tècniques de Processament
Mòdul 4: Eines i Plataformes
Mòdul 5: Optimització de l'Emmagatzematge i Processament
Mòdul 6: Anàlisi de Dades Massives
Mòdul 7: Casos d'Estudi i Aplicacions Pràctiques
- Cas d'Estudi 1: Anàlisi de Logs
- Cas d'Estudi 2: Recomendacions en Temps Real
- Cas d'Estudi 3: Monitoratge de Xarxes Socials