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
