En aquest tema, explorarem el flux de treball d'una feina MapReduce, des de la seva submissió fins a la seva finalització. MapReduce és un model de programació per al processament de grans volums de dades de manera distribuïda. Comprendre el flux de treball és essencial per optimitzar i depurar les feines MapReduce.
- Submissió de la feina
Quan un usuari vol executar una feina MapReduce, segueix aquests passos:
- Escriure el codi MapReduce: L'usuari escriu el codi per a les funcions
Mapper
iReducer
. - Configuració de la feina: L'usuari configura la feina especificant els detalls com el nom de la feina, les classes
Mapper
iReducer
, els camins d'entrada i sortida, etc. - Submissió de la feina: L'usuari envia la feina al clúster Hadoop utilitzant l'API de MapReduce o eines de línia de comandes.
Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.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);
- Divisió de les dades d'entrada
Un cop la feina és enviada, el sistema Hadoop divideix les dades d'entrada en fragments més petits anomenats "splits". Cada split és processat per una instància de Mapper
.
- InputFormat: Defineix com les dades d'entrada es divideixen en splits.
- RecordReader: Llegeix les dades d'entrada i les converteix en parells clau-valor per al
Mapper
.
- Execució del Mapper
Cada split és assignat a una instància de Mapper
que processa els parells clau-valor d'entrada i genera parells clau-valor intermedis.
public class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object 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); } } }
- Particionament
Els parells clau-valor intermedis generats pels Mapper
són particionats segons la clau. Cada partició és assignada a un Reducer
.
- Partitioner: Determina a quin
Reducer
s'envia cada parell clau-valor intermedi.
- Ordenació i combinació
Abans que els parells clau-valor intermedis arribin als Reducer
, són ordenats per clau. A més, es pot aplicar una combinació local per reduir la quantitat de dades transferides.
- Combiner: Una versió local del
Reducer
que s'executa al nodeMapper
per reduir les dades intermedies.
public class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } }
- Execució del Reducer
Els Reducer
processen els parells clau-valor intermedis ordenats i generen els resultats finals.
- Reducer: Agrega els valors associats a cada clau i escriu els resultats finals.
- Escriure els resultats
Els resultats finals generats pels Reducer
són escrits al sistema de fitxers distribuït (HDFS).
- OutputFormat: Defineix com els resultats finals es guarden a HDFS.
- Finalització de la feina
Un cop tots els Mapper
i Reducer
han completat la seva execució, la feina es marca com a completada. L'usuari pot consultar els resultats a HDFS.
Resum
El flux de treball d'una feina MapReduce implica diversos passos clau: submissió de la feina, divisió de les dades d'entrada, execució del Mapper
, particionament, ordenació i combinació, execució del Reducer
, i escriptura dels resultats. Comprendre aquest flux és essencial per optimitzar i depurar les feines MapReduce.
En el següent tema, explorarem com escriure un programa MapReduce detalladament.
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