Foro Formación Hadoop

Ejercicio: Escribiendo un programa hadoop streaming

 
Imagen de Raul Garcia Galindo
Ejercicio: Escribiendo un programa hadoop streaming
de Raul Garcia Galindo - domingo, 17 de febrero de 2019, 12:04
 
Muy buenas,


Realizando el ejercicio "Escribiendo un programa hadoop streaming", he generado los script de map y reduce en bash. Lo he ejecutado de la siguiente forma:


hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.6.0-mr1-cdh5.13.0.jar -input /formacionhadoop/desarrollador/desarrollo/teatro/CasaDeLosCelos_cervantes.txt -output mediapalbrasbashCasa -file /home/cloudera/jar/map.sh -file /home/cloudera/jar/reduce.sh -mapper map.sh -reducer reduce.sh


He comparado el resultado con el del ejercicio anterior, ejecutado con:


hadoop jar Avgwordlength.jar com.formacionhadoop.averagewordlength.AvgWordLengthDriver /formacionhadoop/desarrollador/desarrollo/teatro/CasaDeLosCelos_cervantes.txt mediapalabrasCasa


Pero el resultado no me da igual (En el de bash he puesto 5 decimales, pero no me cuadra el resultado si lo comparo con la media de las letras o los números). Adjunto los resultados y los scripts realizados con bash.


Muchas gracias.




Imagen de Fernando Agudo
Re: Ejercicio: Escribiendo un programa hadoop streaming
de Fernando Agudo - lunes, 18 de febrero de 2019, 10:21
 

Hola Raúl,


En principio eso debe ser por lo siguiente:

 - En la implementación del proceso e java, fíjate que en la solución no se hace el paso a minúsculas de las iniciales (por defecto está comentada esa parte):


String letter = word.substring(0, 1);                

// String letter = word.substring(0, 1).toLowerCase();


                                context.write(new Text(letter), new IntWritable(word.length()));

- Y para la implementación de la solución en python, si se hace el paso a minúscula:

 if len(w) > 0:

      print w[0].lower() + '\t' + str(len(w))


Prueba a poner las 2 partes igual y ejecuta de nuevo.

Un saludo,

Imagen de Raul Garcia Galindo
Re: Ejercicio: Escribiendo un programa hadoop streaming
de Raul Garcia Galindo - sábado, 23 de febrero de 2019, 09:52
 

Buenas Fernando,

En mi caso como te comentaba, no he cogido la solución de phyton, sino que he creado yo un script de map y uno de reduce en bash. En esos scripts no puse la conversión de minúscula, como tampoco lo hice la conversión en el script de java que realicé (entiendo que el de java lo hice bien, no tengo el vuestro de la solución pero lo he comparado ahora y es bastante parecido).

En mi script hecho en bash el resultado a parte de devolver también la media de palabras que empiezan por caracteres (eso entiendo que es normal porque no he simulado en bash el split que hace en java con "\\W+") en las letras y números el resultado para muchas de ellas no es el mismo. Por ejemplo en java me devuelve que la media de "C" es 6 en java y en el que he hecho con bash me devuelve 7.


Te subo de nuevo los ficheros de resultados y el map.sh y el reduce.sh realizado en shell script. (Lo estoy subiendo dando al último icono el de "Gestionar ficheros" que aparece en la parte superior del mensaje, que entiendo que es la forma correcta de hacerlo).

Muchas gracias !!!!