Introducció
En aquest projecte, aplicarem els coneixements adquirits al llarg del curs per analitzar un conjunt de dades massiu utilitzant Hadoop. L'objectiu és proporcionar una experiència pràctica que permeti als estudiants comprendre com utilitzar Hadoop per resoldre problemes reals de grans dades.
Objectius del Projecte
- Configurar un entorn Hadoop funcional.
- Carregar i gestionar dades en HDFS.
- Desenvolupar i executar treballs MapReduce per analitzar les dades.
- Utilitzar eines de l'ecosistema Hadoop per enriquir l'anàlisi.
Requisits Previs
Abans de començar aquest projecte, assegura't de tenir:
- Un clúster Hadoop configurat (pot ser un clúster local o un clúster en el núvol).
- Coneixements bàsics de HDFS i MapReduce.
- Familiaritat amb les eines de l'ecosistema Hadoop com Apache Pig, Hive, etc.
Pas 1: Configuració de l'Entorn
1.1 Instal·lació de Hadoop
Si no tens Hadoop instal·lat, segueix els passos del Mòdul 1: Configuració de l'entorn Hadoop per instal·lar i configurar Hadoop al teu sistema.
1.2 Verificació de la Instal·lació
Assegura't que el teu clúster Hadoop està funcionant correctament executant les següents comandes:
Pas 2: Carregar Dades en HDFS
2.1 Preparació del Conjunt de Dades
Per aquest projecte, utilitzarem un conjunt de dades públic. Descarrega el conjunt de dades des del següent enllaç: Conjunt de Dades Públic.
2.2 Carregar Dades en HDFS
Carrega el conjunt de dades en HDFS utilitzant les següents comandes:
# Crear un directori en HDFS hdfs dfs -mkdir /user/nom_usuari/projecte1 # Carregar el fitxer CSV en HDFS hdfs dfs -put dataset.csv /user/nom_usuari/projecte1/
Pas 3: Desenvolupar un Treball MapReduce
3.1 Introducció a MapReduce
Revisa el Mòdul 4: Programació MapReduce per refrescar els conceptes bàsics de MapReduce.
3.2 Escriure el Codi MapReduce
A continuació, es mostra un exemple de codi MapReduce per analitzar el conjunt de dades. Aquest codi compta la freqüència de paraules en el conjunt de dades.
Mapper
import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] words = value.toString().split("\\s+"); for (String str : words) { word.set(str); context.write(word, one); } } }
Reducer
import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> { @Override protected 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)); } }
Driver
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 WordCount { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(WordCountMapper.class); job.setCombinerClass(WordCountReducer.class); job.setReducerClass(WordCountReducer.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); } }
3.3 Compilar i Executar el Treball MapReduce
Compila el codi utilitzant javac
i crea un fitxer JAR:
# Compilar els fitxers Java javac -classpath `hadoop classpath` -d . WordCountMapper.java WordCountReducer.java WordCount.java # Crear el fitxer JAR jar -cvf wordcount.jar *.class
Executa el treball MapReduce:
hadoop jar wordcount.jar WordCount /user/nom_usuari/projecte1/dataset.csv /user/nom_usuari/projecte1/output
Pas 4: Utilitzar Eines de l'Ecosistema Hadoop
4.1 Apache Hive
Utilitza Apache Hive per executar consultes SQL sobre el conjunt de dades. Primer, crea una taula en Hive:
CREATE TABLE dataset ( column1 STRING, column2 STRING, ... ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; LOAD DATA INPATH '/user/nom_usuari/projecte1/dataset.csv' INTO TABLE dataset;
Executa una consulta simple:
4.2 Apache Pig
Utilitza Apache Pig per processar el conjunt de dades amb un llenguatge de script més senzill:
dataset = LOAD '/user/nom_usuari/projecte1/dataset.csv' USING PigStorage(',') AS (column1:chararray, column2:chararray, ...); grouped_data = GROUP dataset BY column1; counted_data = FOREACH grouped_data GENERATE group, COUNT(dataset); DUMP counted_data;
Pas 5: Anàlisi i Conclusions
5.1 Anàlisi dels Resultats
Revisa els resultats obtinguts dels treballs MapReduce, les consultes Hive i els scripts Pig. Analitza les dades per obtenir informació valuosa.
5.2 Conclusions
- Eficàcia de Hadoop: Hem vist com Hadoop pot gestionar i processar grans volums de dades de manera eficient.
- Utilitat de les Eines: Eines com Hive i Pig faciliten l'anàlisi de dades amb sintaxi més amigable.
- Aplicació Pràctica: Aquest projecte demostra com es poden aplicar els conceptes de Hadoop a problemes reals de grans dades.
Exercicis Pràctics
- Modifica el codi MapReduce per comptar la freqüència de paraules només en una columna específica del conjunt de dades.
- Crea una nova taula en Hive i executa una consulta més complexa que impliqui múltiples columnes.
- Escriu un script Pig que filtri les dades basant-se en una condició específica i després compti les ocurrències.
Solucions
Exercici 1: Modificar el codi MapReduce
Modifica el WordCountMapper
per processar només una columna específica:
@Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] columns = value.toString().split(","); String columnData = columns[0]; // Suposant que volem processar la primera columna String[] words = columnData.split("\\s+"); for (String str : words) { word.set(str); context.write(word, one); } }
Exercici 2: Crear una nova taula en Hive
CREATE TABLE new_dataset ( column1 STRING, column2 STRING, ... ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; LOAD DATA INPATH '/user/nom_usuari/projecte1/new_dataset.csv' INTO TABLE new_dataset; SELECT column1, column2, COUNT(*) FROM new_dataset GROUP BY column1, column2;
Exercici 3: Escriure un script Pig
filtered_data = FILTER dataset BY column1 == 'some_value'; grouped_data = GROUP filtered_data BY column2; counted_data = FOREACH grouped_data GENERATE group, COUNT(filtered_data); DUMP counted_data;
Conclusió
Aquest projecte ha proporcionat una experiència pràctica en l'ús de Hadoop per analitzar grans dades. Hem cobert des de la configuració de l'entorn fins a l'ús de MapReduce i altres eines de l'ecosistema Hadoop per realitzar anàlisis detallades. Amb aquests coneixements, estàs preparat per abordar projectes més complexos i aplicar Hadoop a problemes reals de grans dades.
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