Foro Formación Hadoop

Ejercicio:Ejecutando un job MapReduce

 
Imagen de José Manuel Mesa Gómez
Ejercicio:Ejecutando un job MapReduce
de José Manuel Mesa Gómez - jueves, 21 de junio de 2018, 20:31
 

Hola,

 tengo un par de dudas:

- Al ejecutar : Cuaderno de Ejercicio Desarrollo


 hadoop jar wordcount.jar  /formacionhadoop/desarrollador/cervantes  /formacionhadoop/desarrollador/wordcounts7


Obtengo errores, parece ser porque dentro de la carpeta cervantes hay subcarpetas y no archivos. Si por el contrario pongo una subcarpeta (que contiene archivos) o directamente un archivo si funciona. Que hago mal para que cuando indico una carpeta que contiene subcarpetas no funcione ?:

Caused by: 

...

org.apache.hadoop.ipc.RemoteException(java.io.FileNotFoundException): Path is not a file: /formacionhadoop/desarrollador/cervantes/teatro

at org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:70)

at org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:56)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsInt(FSNamesystem.java:2092)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:2062)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1975)

at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getBlockLocations(NameNodeRpcServer.java:575)

at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getBlockLocations(AuthorizationProviderProxyClientProtocol.java:92)

at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getBlockLocations(ClientNamenodeProtocolServerSideTranslatorPB.java:376)

at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)

at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:617)

at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1073)

at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2226)

at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2222)

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:1917)

at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2220)


at org.apache.hadoop.ipc.Client.call(Client.java:1504)

at org.apache.hadoop.ipc.Client.call(Client.java:1441)

at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:230)

at com.sun.proxy.$Proxy17.getBlockLocations(Unknown Source)

at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getBlockLocations(ClientNamenodeProtocolTranslatorPB.java:266)

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.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:260)

at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:104)

at com.sun.proxy.$Proxy18.getBlockLocations(Unknown Source)

at org.apache.hadoop.hdfs.DFSClient.callGetBlockLocations(DFSClient.java:1287)

... 20 more


18/06/21 11:21:08 INFO mapreduce.Job:  map 100% reduce 100%

18/06/21 11:21:08 INFO mapreduce.Job: Job job_1528234690118_0007 failed with state FAILED due to: Task failed task_1528234690118_0007_m_000000

Job failed as tasks failed. failedMaps:1 failedReduces:0


18/06/21 11:21:08 INFO mapreduce.Job: Counters: 13

Job Counters 

Failed map tasks=7

Killed map tasks=1

Killed reduce tasks=1

Launched map tasks=8

Other local map tasks=8

Total time spent by all maps in occupied slots (ms)=105713

Total time spent by all reduces in occupied slots (ms)=0

Total time spent by all map tasks (ms)=105713

Total vcore-milliseconds taken by all map tasks=105713

Total megabyte-milliseconds taken by all map tasks=108250112

Map-Reduce Framework

CPU time spent (ms)=0

Physical memory (bytes) snapshot=0

Virtual memory (bytes) snapshot=0


- Por otro lado, entendí en el video sobre como funciona MapReduce, que los reducer no se ejecutan hasta que no han termidado TODOS los mapper. Sin embargo en el fragmento de log que añado abajo se ve como antes de llegar 100% de los map ya hay reduce al 20%. Estos % hacen referencia a esto que comento? si no es así, me podéis explicar a que hacen referencia dichos %?


18/06/21 11:01:59 INFO mapreduce.Job:  map 0% reduce 0%

18/06/21 11:10:16 INFO mapreduce.Job:  map 7% reduce 0%

18/06/21 11:10:35 INFO mapreduce.Job:  map 10% reduce 0%

18/06/21 11:11:00 INFO mapreduce.Job:  map 17% reduce 0%

18/06/21 11:11:01 INFO mapreduce.Job:  map 20% reduce 0%

18/06/21 11:11:22 INFO mapreduce.Job:  map 30% reduce 0%

18/06/21 11:11:29 INFO mapreduce.Job:  map 40% reduce 0%

18/06/21 11:11:30 INFO mapreduce.Job:  map 60% reduce 0%

18/06/21 11:12:19 INFO mapreduce.Job:  map 60% reduce 20%

18/06/21 11:12:20 INFO mapreduce.Job:  map 70% reduce 20%

18/06/21 11:12:24 INFO mapreduce.Job:  map 80% reduce 23%

18/06/21 11:12:30 INFO mapreduce.Job:  map 90% reduce 27%

18/06/21 11:12:32 INFO mapreduce.Job:  map 100% reduce 27%

18/06/21 11:12:35 INFO mapreduce.Job:  map 100% reduce 100%

Gracias

Un cordial saludo.

Imagen de Admin Formación Hadoop
Re: Ejercicio:Ejecutando un job MapReduce
de Admin Formación Hadoop - viernes, 22 de junio de 2018, 11:28
 

Hola José Manuel,

El problema es que un MapReduce no puede procesar directorios. Según tenemos nuestra implementación, el MapReduce indica como ficheros de entrada TODO el contenido del directorio que le pongamos como entrada, si este directorio tiene "cosas" que no son ficheros da error.

En el ejercicio del HDFS se indica que se borre ese subdirectorio para que luego en esta parte no tengáis problemas (se indica a modo de seguir aprendiendo comandos con el cliente de hadoop fs).

En una implementación más completa, en el driver se debería recorrer todo el directorio de entrada e ir seleccionado únicamente los ficheros en una lista de Path que sería lo que se pasaría de entrada al mapreduce.


Espero que esta explicación te haya servido de ayuda.

Un saludo,