Introducció
En aquest tema, explorarem el model de programació MapReduce i el seu ús en el sistema Hadoop per a la computació distribuïda. MapReduce és un model de programació que permet processar grans quantitats de dades de manera paral·lela i distribuïda. Hadoop és un marc de treball que implementa aquest model i proporciona una infraestructura robusta per al processament de dades a gran escala.
Objectius d'Aprenentatge
Al final d'aquest tema, hauràs de ser capaç de:
- Comprendre els conceptes bàsics de MapReduce.
- Explicar com funciona el procés de MapReduce.
- Implementar un treball senzill de MapReduce utilitzant Hadoop.
- Comprendre l'arquitectura de Hadoop i els seus components principals.
Conceptes Bàsics de MapReduce
Definició
MapReduce és un model de programació desenvolupat per Google per processar grans volums de dades de manera paral·lela i distribuïda. Es compon de dues funcions principals:
- Map: Processa una entrada de dades i genera un conjunt de parells clau-valor intermèdia.
- Reduce: Agafa els parells clau-valor generats per la funció Map i els combina per produir el resultat final.
Funcionament
El procés de MapReduce es divideix en diverses etapes:
- Input Splitting: Les dades d'entrada es divideixen en fragments més petits.
- Mapping: Cada fragment es processa per separat per la funció Map, generant parells clau-valor intermèdia.
- Shuffling and Sorting: Els parells clau-valor intermèdia es barregen i s'ordenen per clau.
- Reducing: Els parells clau-valor ordenats es processen per la funció Reduce per generar el resultat final.
Exemple de MapReduce
Considerem un exemple senzill de comptar la freqüència de paraules en un conjunt de documents.
Funció Map
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } }
Funció Reduce
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } context.write(key, new IntWritable(sum)); } }
Hadoop: Arquitectura i Components
Components Principals
Hadoop està compost per diversos components clau:
- Hadoop Distributed File System (HDFS): Un sistema de fitxers distribuït que emmagatzema dades de manera fiable a través de múltiples màquines.
- YARN (Yet Another Resource Negotiator): Un sistema de gestió de recursos que programa i gestiona els treballs de MapReduce.
- MapReduce: El motor de processament de dades que executa els treballs de MapReduce.
Arquitectura de Hadoop
Hadoop segueix una arquitectura mestre-esclau:
- Namenode: El node mestre que gestiona el sistema de fitxers HDFS.
- Datanodes: Els nodes esclaus que emmagatzemen les dades.
- ResourceManager: El node mestre que gestiona els recursos de YARN.
- NodeManagers: Els nodes esclaus que executen els treballs de MapReduce.
Flux de Treball en Hadoop
- Ingestió de Dades: Les dades es carreguen a HDFS.
- Divisió de Dades: Les dades es divideixen en blocs i es distribueixen entre els Datanodes.
- Execució de MapReduce: YARN programa els treballs de MapReduce i els executa en els NodeManagers.
- Emmagatzematge de Resultats: Els resultats es guarden a HDFS.
Exercici Pràctic
Objectiu
Implementar un treball de MapReduce per comptar la freqüència de paraules en un conjunt de documents utilitzant Hadoop.
Passos
- Configuració de l'Entorn: Instal·la Hadoop i configura l'entorn.
- Escriure el Codi: Implementa les funcions Map i Reduce.
- Compilar i Executar: Compila el codi i executa el treball de MapReduce.
Solució
Configuració de l'Entorn
- Descarrega i instal·la Hadoop des del lloc oficial.
- Configura les variables d'entorn necessàries (
HADOOP_HOME
,JAVA_HOME
). - Inicia el sistema HDFS i YARN.
Escriure el Codi
Utilitza els exemples de codi proporcionats anteriorment per implementar les funcions Map i Reduce.
Compilar i Executar
- Compila el codi Java:
javac -classpath `hadoop classpath` -d wordcount_classes WordCountMapper.java WordCountReducer.java jar -cvf wordcount.jar -C wordcount_classes/ .
- Executa el treball de MapReduce:
Retroalimentació
- Error Comú: No configurar correctament les variables d'entorn. Assegura't que
HADOOP_HOME
iJAVA_HOME
estan configurades correctament. - Consell: Utilitza fitxers de dades petits per a les primeres proves per assegurar-te que el codi funciona correctament abans de processar grans volums de dades.
Resum
En aquest tema, hem après els conceptes bàsics de MapReduce i com utilitzar Hadoop per implementar treballs de MapReduce. Hem explorat l'arquitectura de Hadoop i els seus components principals, i hem implementat un exemple pràctic de comptar la freqüència de paraules en un conjunt de documents. Amb aquests coneixements, estàs preparat per abordar problemes de processament de dades a gran escala utilitzant MapReduce i Hadoop.
Curs d'Arquitectures Distribuïdes
Mòdul 1: Introducció als Sistemes Distribuïts
- Conceptes Bàsics de Sistemes Distribuïts
- Models de Sistemes Distribuïts
- Avantatges i Desafiaments dels Sistemes Distribuïts