Foro Formación Hadoop
Problema al almacenar ficheros en directorios
Buenas,
He empezado recientemente con el curso y ya me he quedado bloqueado en los primeros ejercicios.
Estoy trabajando con el HDFS y el paso 5 pide copiar el fichero acceso_log.txt dentro del directorio /formacionhadoop/desarrollador/accesoslog.
El directorio está creado pero cuando trato de almacenar el fichero algo va mal porque al listar el contenido no me devuelve nada, es como si estuviera vacio.
Os adjunto el log que devuelve la sentencia put:
D:\Microk\Big Data\Hadoop\Formacion\Material Ejercicios\datasets>hadoop fs -put test.txt /formacionhadoop/desarrollador/accesoslog
16/08/26 12:33:57 WARN hdfs.DFSClient: DataStreamer Exception
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /formacionhadoop/desarrollador/accesoslog/test.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation.
at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1550)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNewBlockTargets(FSNamesystem.java:3110)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3034)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:723)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:492)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:969)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2049)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2045)
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:1657)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2043)
at org.apache.hadoop.ipc.Client.call(Client.java:1476)
at org.apache.hadoop.ipc.Client.call(Client.java:1407)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:229)
at com.sun.proxy.$Proxy9.addBlock(Unknown Source)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.addBlock(ClientNamenodeProtocolTranslatorPB.java:418)
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:187)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
at com.sun.proxy.$Proxy10.addBlock(Unknown Source)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.locateFollowingBlock(DFSOutputStream.java:1430)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1226)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:449)
put: File /formacionhadoop/desarrollador/accesoslog/test.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation.
D:\Microk\Big Data\Hadoop\Formacion\Material Ejercicios\datasets>hadoop fs -ls /formacionhadoop/desarrollador/accesoslog
D:\Microk\Big Data\Hadoop\Formacion\Material Ejercicios\datasets>hadoop fs -ls /
Gracias
Hola Jordi,
¿Qué sistema estas utilizando para realizar los ejercicios? ¿La VM quickstart de Cloudera?
El problema es que no tienes ningún DataNode levantado "There are 0 datanode(s) running and no node(s) are excluded in this operation."
Si quieres para ver los servicios que se están ejecutando de una manera rápida, puedes ejecutar en una terminal el comando: sudo jps -m
Esto te muestra un listado de los procesos java que se están ejecutando. Para el HDFS debe aparecer el NameNode y al menos un DataNode.
En el caso de que te falte alguno de estos servicios, los puedes arrancar desde el Cloudera Manager (en caso de que lo estés utilizando) o desde la consola de comandos (en el directorio /etc/init.d/ se encuentran todos los servicios).
Para arrancar y parar servicios puedes ver el vídeo tutoría de Configuración de la VM.
Un saludo,
Social networks