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