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:

  1. Comprendre els conceptes bàsics de MapReduce.
  2. Explicar com funciona el procés de MapReduce.
  3. Implementar un treball senzill de MapReduce utilitzant Hadoop.
  4. 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:

  1. Map: Processa una entrada de dades i genera un conjunt de parells clau-valor intermèdia.
  2. 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:

  1. Input Splitting: Les dades d'entrada es divideixen en fragments més petits.
  2. Mapping: Cada fragment es processa per separat per la funció Map, generant parells clau-valor intermèdia.
  3. Shuffling and Sorting: Els parells clau-valor intermèdia es barregen i s'ordenen per clau.
  4. 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:

  1. 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.
  2. YARN (Yet Another Resource Negotiator): Un sistema de gestió de recursos que programa i gestiona els treballs de MapReduce.
  3. 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

  1. Ingestió de Dades: Les dades es carreguen a HDFS.
  2. Divisió de Dades: Les dades es divideixen en blocs i es distribueixen entre els Datanodes.
  3. Execució de MapReduce: YARN programa els treballs de MapReduce i els executa en els NodeManagers.
  4. 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

  1. Configuració de l'Entorn: Instal·la Hadoop i configura l'entorn.
  2. Escriure el Codi: Implementa les funcions Map i Reduce.
  3. Compilar i Executar: Compila el codi i executa el treball de MapReduce.

Solució

Configuració de l'Entorn

  1. Descarrega i instal·la Hadoop des del lloc oficial.
  2. Configura les variables d'entorn necessàries (HADOOP_HOME, JAVA_HOME).
  3. 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

  1. Compila el codi Java:
javac -classpath `hadoop classpath` -d wordcount_classes WordCountMapper.java WordCountReducer.java
jar -cvf wordcount.jar -C wordcount_classes/ .
  1. Executa el treball de MapReduce:
hadoop jar wordcount.jar WordCount input output

Retroalimentació

  • Error Comú: No configurar correctament les variables d'entorn. Assegura't que HADOOP_HOME i JAVA_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.

© Copyright 2024. Tots els drets reservats