Foro Formación Hadoop

Error: No se encuentra el directorio formacionhadoop en HDFS

 
Imagen de Fabiola Carrasco
Error: No se encuentra el directorio formacionhadoop en HDFS
de Fabiola Carrasco - viernes, 28 de octubre de 2016, 10:25
 

Buenos días, 

A continuación os indico una consulta que nos ha realizado uno de los alumnos del Master Experto Big Data:

 

Estoy con el primer ejercicio y tengo el siguiente problema: en la VM de cloudera, cuando intento subir un directorio a /formacionhadoop como describe el ejercicio, ni el directorio /formacionhadoop existe ni lo puedo crear porque no tengo permisos:

[cloudera@quickstart datasets]$ hadoop fs -put cervantes /formacionhadoop/desarrollador/ 
put: `/formacionhadoop/desarrollador/': No such file or directory 
[cloudera@quickstart datasets]$ hadoop fs -ls /formacionhadoop/ 
ls: `/formacionhadoop/': No such file or directory 
[cloudera@quickstart datasets]$ hadoop fs -mkdir /formacionhadoop/ 
mkdir: Permission denied: user=cloudera, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x

Si lo intento subir a mi home del hdfs donde sí que tengo permisos, me sale la siguiente excepción muchas veces:

[cloudera@quickstart datasets]$ hadoop fs -put cervantes /user/cloudera/ 
16/10/25 12:03:31 WARN hdfs.DFSClient: Caught exception java.lang.InterruptedException 
    at java.lang.Object.wait(Native Method) 
    at java.lang.Thread.join(Thread.java:1281) 
    at java.lang.Thread.join(Thread.java:1355) 
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.closeResponder(DFSOutputStream.java:862) 
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.endBlock(DFSOutputStream.java:600) 
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:789)

¿Cómo resuelvo este problema?

Imagen de Fabiola Carrasco
Re: Error: No se encuentra el directorio formacionhadoop en HDFS
de Fabiola Carrasco - viernes, 28 de octubre de 2016, 10:29
 

Efectivamente, el directorio formacionhadoop no existe (es un directorio de ejemplo para seguir unas directrices en los ejercicios). Si quieres seguir las instrucciones tal cual puedes crearlo, si no, utiliza el /tmp.

Para tener permisos puedes ejecutar:
sudo -u hdfs hadoop fs -mkdir /formacionhadoop

Comprueba que tienes los servicios de HDFS levantados(Namenode y datando).

- Para probar esto rápidamente, puedes indicar el comando: sudo jps -m

Ese comando muestra un listado de los procesos Java que se están ejecutando en la máquina y entre ellos debería aparecer "NameNode" y "DataNode". 

Si se sigue produciendo el error, o hay algún servicio caído, se debe realizar un reinicio de los servicios de HDFS.

Imagen de Fabiola Carrasco
Re: Error: No se encuentra el directorio formacionhadoop en HDFS
de Fabiola Carrasco - viernes, 28 de octubre de 2016, 13:17
 

Respuesta del alumno:

He creado el directorio /formacionhadoop y le he metido en el grupo superuser al usuario cloudera para poder subir ahí ficheros.
 

Me seguí fallando el put, pero luego en el cloudera manager he visto que el HDFS estaba con errores, así que le he reiniciado y ya me ha dejado subirlo.

 

Imagen de Fernando Agudo
Re: Error: No se encuentra el directorio formacionhadoop en HDFS
de Fernando Agudo - viernes, 28 de octubre de 2016, 10:35
 

Para modificar los permisos de los directorios de HFS se pueden utilizar los comando siguientes:

Cambio de permisos:

sudo -u hdfs hadoop fs -chmod 777 /formacionhadoop

El comando anterior cambia los permisos al directorio formacionhadoop dando acceso a TODOS los  usuarios a ese directorio (esto es debido al 777, es posible indicar otra serie de servicios igual que en un sistema UNIX).

Cambio de usuario y grupo:

sudo -u hdfs hadoop fs -chown usuario:grupo /formacionhadoop

Con el comando anterior podríamos indicar/modificar el usuario y grupo al directorio (se debería cambiar las palabras usuario y grupo por los valores correspondientes).

 

Para más información sobre las operaciones que podemos realizar en HDFS podemos poner el comando:

hadoop fs

El comando anterior mostrará un listado con las opciones de todos los comandos/instrucciones que podemos realizar sobre el HDFS con el cliente de Hadoop (hadoop fs).