12
Aplicaciones Difusas: Map Reduce java Autor(es ): Mtr. Luis Fernando Aguas

Aplicaciones Difusas Map Reduce con java

Embed Size (px)

Citation preview

Page 1: Aplicaciones Difusas Map Reduce con java

Aplicaciones Difusas:Map Reduce java

Autor(es):

• Mtr. Luis Fernando Aguas

Page 2: Aplicaciones Difusas Map Reduce con java

MapReduce• Es un sistema de procesamiento de datos por

lotes, distribuido y en paralelo• La función map() se ejecutan en paralelo,

creando diferentes valores intermedios de diferentes conjuntos de datos de entrada • La función de reduce() se ejecuta en paralelo,

combina los valores intermedios en uno o más valores finales para la misma clave de salida.

Page 3: Aplicaciones Difusas Map Reduce con java

MapReduce• Se deben implementar dos interfaces:

map (key, value) -> (inter_key, inter_value) listreduce (inter_key, inter_value list) -> (out_key, out_value) list

• Se tienen un JobTracker maestro y un TaskTraker esclavo por nodoEl maestro es responsable de la programación de tareas en los

esclavos, su seguimiento y volver a ejecutar las tareas fallidas. Los esclavos ejecutan las tareas según las instrucciones del

maestro. • La configuración del Job contiene mínimamente:• el directorio de los archivos de entrada • el directorio donde quedaran los archivos de salida, • el nombre del programa que ejecutara las tareas de mapeo y reducción, • los nombres de las funciones o de las clases de map y de reduce.

Page 4: Aplicaciones Difusas Map Reduce con java

http://www.cloudera.com/content/cloudera/en/resources/library/training/introduction-to-apache-mapreduce-and-hdfs.html

EJEMPLO CONTAR PALABRASUna sencilla aplicación que cuenta el número de ocurrencias de cada palabra en un conjunto de entrada.

Page 5: Aplicaciones Difusas Map Reduce con java

public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text();

public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); output.collect(word, one); } } }El método de map procesa una línea a la vez.

divide la línea en tokens separados por espacios en blanco, a través de la StringTokenizer, Emite un par clave-valor <<palabra>, 1>.

CÓDIGO CONTAR PALABRAS: MAP

Page 6: Aplicaciones Difusas Map Reduce con java

conf.setCombinerClass(Reduce.class);

El efecto en el proceso WordCount es entregar un consolidad local de ocurrencias de cada palabra.

CÓDIGO CONTAR PALABRAS CON COMBINER.

En la configuración del job se adiciona como parámetro la siguiente instrucción.

< Hello, 1>< World, 1>< Bye, 1>< World, 1>

< Bye, 1>< Hello, 1>< World, 2>

Page 7: Aplicaciones Difusas Map Reduce con java

public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { int sum = 0; while (values.hasNext()) { sum += values.next().get(); } output.collect(key, new IntWritable(sum)); } }

La implementación reductor, a través del método de reduce suma los valores, que son las sumas locales entregadas por la fase anterior.

CÓDIGO CONTAR PALABRAS: REDUCE

Page 8: Aplicaciones Difusas Map Reduce con java

JobConf: Es la interfaz principal para establecer los parámetros de configuración del trabajo de MapReduce, como paths de archivos de entrada y salida, la clase de mapeo y de reducción, etc.

Algunos de estos parámetros se pasan por consola (línea de comandos) o por la GUI en propiedades del job.

CÓDIGO CONTAR PALABRAS:JOBCONF

public static void main(String[] args) throws Exception {

JobConf conf = new JobConf(WordCount.class); conf.setJobName("wordcount");

conf.setOutputKeyClass(Text.class);

conf.setOutputValueClass(IntWritable.class);

conf.setMapperClass(Map.class);conf.setCombinerClass(Reduce.class);conf.setReducerClass(Reduce.class);

conf.setInputFormat(TextInputFormat.class);

conf.setOutputFormat(TextOutputFormat.class);

FileInputFormat.setInputPaths(conf, new Path(args[0]));

FileOutputFormat.setOutputPath(conf, new Path(args[1]));

JobClient.runJob(conf);}

Page 9: Aplicaciones Difusas Map Reduce con java

CÓDIGO CONTAR PALABRAS: EJECUCIÓN POR CONSOLA

• Ejecución del proceso:$ bin/hadoop jar /usr/joe/wordcount.jar org.myorg.WordCount

/usr/joe/wordcount/input /usr/joe/wordcount/output

• bin/hadoop Indica que es un proceso hadoop. • jar Indica el tipo de lenguaje del programa principal (java). • /usr/joe/wordcount.jar Nombre del programa a ejecutar• org.myorg.WordCount Nombre clase donde está el main del programa. • $/usr/joe/wordcount/input Ruta del directorio de los archivos de entrada en HDFS• $/usr/joe/wordcount/output Ruta del directorio de los archivos de salida en HDFS

Page 10: Aplicaciones Difusas Map Reduce con java

EJECUCIÓN DEL CÓDIGO CONTAR PALABRASPOR INTERFAZ GRAFICA (HUE)

Page 11: Aplicaciones Difusas Map Reduce con java

EJECUCIÓN DEL CÓDIGO CONTAR PALABRASPOR INTERFAZ GRAFICA (HUE)

Page 12: Aplicaciones Difusas Map Reduce con java

BIBLIOGRAFÍA

http://vimeo.com/3584536http://archive.cloudera.com/cdh/3/hadoop/mapred_tutorial.html#Source+Codehttp://archive.cloudera.com/cdh/3/hadoop/api/org/apache/hadoop/mapred/Mapper.htmlhttp://archive.cloudera.com/cdh/3/hadoop/api/org/apache/hadoop/mapred/Reducer.htmlhttp://archive.cloudera.com/cdh/3/hadoop/api/org/apache/hadoop/mapred/JobConf.htmlhttp://java.dzone.com/articles/running-hadoop-mapreduce