Introducció
En aquest projecte, aprendrem a utilitzar Hadoop per a implementar un flux de treball d'aprenentatge automàtic. Utilitzarem l'ecosistema Hadoop per a processar grans volums de dades i aplicar algorismes d'aprenentatge automàtic per a obtenir insights valuosos. Aquest projecte inclou els següents passos:
- Preparació de les dades
 - Processament de les dades amb MapReduce
 - Aplicació d'algorismes d'aprenentatge automàtic
 - Avaluació del model
 - Optimització i ajust del model
 
- Preparació de les dades
 
1.1. Recopilació de dades
Per a aquest projecte, utilitzarem un conjunt de dades públics. Podeu descarregar el conjunt de dades des de aquest enllaç.
1.2. Emmagatzematge de dades a HDFS
Un cop descarregat el conjunt de dades, el primer pas és carregar-lo a HDFS.
# Crear un directori a HDFS hdfs dfs -mkdir /user/hadoop/ml_project # Carregar el conjunt de dades a HDFS hdfs dfs -put local_dataset.csv /user/hadoop/ml_project/
- Processament de les dades amb MapReduce
 
2.1. Escriure un programa MapReduce
El següent pas és escriure un programa MapReduce per a processar les dades. A continuació es mostra un exemple de codi en Java per a un treball MapReduce que calcula la mitjana de valors d'un conjunt de dades.
Mapper.java
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class AverageMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    private final static Text word = new Text("average");
    private IntWritable number = new IntWritable();
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String[] fields = value.toString().split(",");
        int num = Integer.parseInt(fields[1]);
        number.set(num);
        context.write(word, number);
    }
}Reducer.java
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
public class AverageReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int sum = 0;
        int count = 0;
        for (IntWritable val : values) {
            sum += val.get();
            count++;
        }
        int average = sum / count;
        context.write(key, new IntWritable(average));
    }
}Driver.java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class AverageDriver {
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "average calculation");
        job.setJarByClass(AverageDriver.class);
        job.setMapperClass(AverageMapper.class);
        job.setReducerClass(AverageReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}2.2. Executar el treball MapReduce
Compila i executa el treball MapReduce:
# Compilar el codi Java javac -classpath `hadoop classpath` -d . AverageMapper.java AverageReducer.java AverageDriver.java # Crear un fitxer JAR jar -cvf average.jar *.class # Executar el treball MapReduce hadoop jar average.jar AverageDriver /user/hadoop/ml_project/local_dataset.csv /user/hadoop/ml_project/output
- Aplicació d'algorismes d'aprenentatge automàtic
 
3.1. Utilitzar Apache Mahout
Apache Mahout és una biblioteca d'aprenentatge automàtic que s'integra amb Hadoop. Utilitzarem Mahout per a aplicar un algorisme de classificació.
# Convertir les dades a format seqüencial mahout seqdirectory -i /user/hadoop/ml_project/output -o /user/hadoop/ml_project/seqdata # Vectoritzar les dades mahout seq2sparse -i /user/hadoop/ml_project/seqdata -o /user/hadoop/ml_project/vectors # Aplicar l'algorisme de classificació mahout trainnb -i /user/hadoop/ml_project/vectors -o /user/hadoop/ml_project/model -li /user/hadoop/ml_project/labels -ow -c
- Avaluació del model
 
4.1. Validació creuada
Utilitzarem la validació creuada per a avaluar el rendiment del nostre model.
mahout testnb -i /user/hadoop/ml_project/vectors -m /user/hadoop/ml_project/model -l /user/hadoop/ml_project/labels -ow -o /user/hadoop/ml_project/predictions
- Optimització i ajust del model
 
5.1. Ajust de paràmetres
Experimenta amb diferents paràmetres i algorismes per a millorar el rendiment del model. Prova diferents tècniques de preprocessament de dades, com la normalització i la selecció de característiques.
Conclusió
En aquest projecte, hem après a utilitzar Hadoop per a implementar un flux de treball d'aprenentatge automàtic. Hem cobert la preparació de dades, el processament amb MapReduce, l'aplicació d'algorismes d'aprenentatge automàtic amb Apache Mahout, l'avaluació del model i l'optimització. Aquest projecte proporciona una base sòlida per a aplicar tècniques d'aprenentatge automàtic a grans volums de dades utilitzant l'ecosistema Hadoop.
Exercicis pràctics
- Experimenta amb diferents conjunts de dades: Prova aquest flux de treball amb altres conjunts de dades públics.
 - Prova altres algorismes: Utilitza altres algorismes d'aprenentatge automàtic disponibles a Apache Mahout.
 - Optimitza el teu model: Experimenta amb diferents tècniques de preprocessament de dades i ajust de paràmetres per a millorar el rendiment del teu model.
 
Solucions als exercicis
- Experimenta amb diferents conjunts de dades: Descarrega un nou conjunt de dades, carrega'l a HDFS i segueix els passos del projecte per a processar-lo i aplicar un algorisme d'aprenentatge automàtic.
 - Prova altres algorismes: Consulta la documentació d'Apache Mahout per a veure quins altres algorismes estan disponibles i com utilitzar-los.
 - Optimitza el teu model: Prova diferents tècniques de preprocessament, com la normalització, la selecció de característiques i l'ajust de paràmetres, per a veure com afecten el rendiment del teu model.
 
Curs de Hadoop
Mòdul 1: Introducció a Hadoop
- Què és Hadoop?
 - Visió general de l'ecosistema Hadoop
 - Hadoop vs Bases de dades tradicionals
 - Configuració de l'entorn Hadoop
 
Mòdul 2: Arquitectura de Hadoop
- Components bàsics de Hadoop
 - HDFS (Sistema de fitxers distribuït de Hadoop)
 - Marc MapReduce
 - YARN (Yet Another Resource Negotiator)
 
Mòdul 3: HDFS (Sistema de fitxers distribuït de Hadoop)
Mòdul 4: Programació MapReduce
- Introducció a MapReduce
 - Flux de treball d'una feina MapReduce
 - Escriure un programa MapReduce
 - Tècniques d'optimització de MapReduce
 
Mòdul 5: Eines de l'ecosistema Hadoop
Mòdul 6: Conceptes avançats de Hadoop
- Seguretat de Hadoop
 - Gestió de clústers de Hadoop
 - Ajust de rendiment de Hadoop
 - Serialització de dades de Hadoop
 
Mòdul 7: Aplicacions reals i estudis de cas
- Hadoop en emmagatzematge de dades
 - Hadoop en aprenentatge automàtic
 - Hadoop en processament de dades en temps real
 - Estudis de cas d'implementacions de Hadoop
 
