En esta lección aprenderemos a desarrollar una aplicación distribuida con Hadoop utilizando el modelo de programación MapReduce. Implementaremos un caso clásico de conteo de palabras (WordCount).
hadoop jar /path/hadoop-streaming.jar \
-input /data/textos \
-output /salida/wordcount \
-mapper "python mapper.py" \
-reducer "python reducer.py"
El mapper recibe líneas de texto y emite cada palabra con el valor 1.
# mapper.py
import sys
for line in sys.stdin:
for word in line.strip().split():
print(f"{word}\t1")
El reducer agrupa las palabras y suma sus ocurrencias.
# reducer.py
import sys
from collections import defaultdict
counts = defaultdict(int)
for line in sys.stdin:
word, value = line.strip().split("\t")
counts[word] += int(value)
for word, count in counts.items():
print(f"{word}\t{count}")
# combiner.py (igual que reducer pero aplicado en el mapper)
import sys
from collections import defaultdict
counts = defaultdict(int)
for line in sys.stdin:
word, value = line.strip().split("\t")
counts[word] += int(value)
for word, count in counts.items():
print(f"{word}\t{count}")
MapReduce fue una revolución en el procesamiento distribuido de datos. Aunque tecnologías como Spark lo han superado en velocidad y facilidad, sigue siendo fundamental para entender los principios del Big Data.