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
