Foro Formación Hadoop
Error Ejecutando Hadoop Streaming - Cannot run program "mapper.py": error=2, No such file or directory
Hola, Nuevamente os indico el error que ha tenido uno de los alumnos por si os sirve de ayuda. También aprovecho para animar a todos los alumnos a publicar aquí los errores para poder aprender todos juntos ;).
Un saludo.
Error: Se ha encontrado con el siguiente error al ejecutar el ejercicio de Hadoop Streaming:
16/07/12 09:30:31 INFO mapreduce.Job: Task Id : attempt_1468338986060_0002_m_000001_0, Status : FAILED
Error: java.lang.RuntimeException: Error in configuring object
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:109)
at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:75)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:449)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:106)
... 9 more
Caused by: java.io.IOException: Cannot run program "mapper.py": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:208)
... 23 more
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:186)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
... 24 more
Solución:
El error se debe a que no encuentra el fichero mapper.py:
Caused by: java.io.IOException: Cannot run program "mapper.py":
error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:208)
... 23 more
Caused by: java.io.IOException: error=2, No such file or director
Los comandos necesarios para ejecutar la instrucción son:
-input (directorio que quieres procesar - HDFS)
-ouput (directorio de salida donde almacenar los datos, no debe existir - HDFS)
-file (script que necesitas enviar al cluster hadoop para ejecutar el MapReduce, se puede llamar tantas veces como scripts necesites enviar al cluster)
-mapper (script que necesitas ejecutar para la fase mapper)
-reducer (script que necesitas ejecutar para la fase reducer)
Si te das cuenta en tu instrucción en los argumentos -file le estás pasando el directorio, no el fichero, es ahí donde tienes el error:
-file ../python_sample_solution/
-file ../python_sample_solution/
python_sample_solution]$ hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-*.jar -input /formacionhadoop/desarrollador/cervantes/novela/quijote.txt -output /formacionhadoop/desarrollador/streaming4 -file ../python_sample_solution/ -file ../python_sample_solution/ -mapper mapper.py -reducer reducer.py
- La solución correcta sería:
python_sample_solution]$ hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-*.jar -input /formacionhadoop/desarrollador/cervantes/novela/quijote.txt -output /formacionhadoop/desarrollador/streaming4 -file ../python_sample_solution/mapper.py -file ../python_sample_solution/reducer.py -mapper mapper.py -reducer reducer.py
Moraleja: Hay que indicar todos los ficheros/scripts que necesitamos enviar al clúster para ejecutar el MapReduce, no la ruta ;)
Espero que os sirva de ayuda.
Un saludo,
Redes sociales