Permiso denegado en hdfs

Soy nuevo en el sistema de archivos distribuido de hadoop, he realizado la instalación completa de hadoop single node en mi máquina. Pero después de eso, cuando voy a cargar datos a hdfs, aparece un mensaje de error Permission Denied .

Mensaje de terminal con comando:

 hduser@ubuntu:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input put: /usr/local/input-data (Permission denied) hduser@ubuntu:/usr/local/hadoop$ 

Después de usar sudo y agregar hduser a sudouser:

 hduser@ubuntu:/usr/local/hadoop$ sudo bin/hadoop fs -put /usr/local/input-data/ /inwe put: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x hduser@ubuntu:/usr/local/hadoop$ 

Resolví este problema temporalmente inhabilitando el permiso dfs. Al agregar debajo el código de propiedad a conf / hdfs-site.xml

  dfs.permissions false  

Tuve una situación similar y aquí está mi enfoque, que es algo diferente:

  HADOOP_USER_NAME=hdfs hdfs dfs -put /root/MyHadoop/file1.txt / 

Lo que realmente hace es leer el archivo local de acuerdo con sus permisos locales, pero al colocar el archivo en HDFS, se autentica como usuario hdfs . Puede hacer esto con otra ID (tenga cuidado con la configuración de los esquemas de autenticación real, pero esto no suele ser un caso).

Ventajas:

  1. Los permisos se mantienen en HDFS.
  2. No necesitas sudo
  3. En realidad, no necesita los ‘hdfs’ de usuario local apropiados.
  4. No necesita copiar nada ni cambiar los permisos debido a los puntos anteriores.

Usted está experimentando dos problemas separados aquí:


 hduser@ubuntu:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input put: /usr/local/input-data (Permission denied) 

Aquí, el usuario hduser no tiene acceso al directorio local /usr/local/input-data . Es decir, sus permisos locales son demasiado restrictivos. Deberías cambiarlo


 hduser@ubuntu:/usr/local/hadoop$ sudo bin/hadoop fs -put /usr/local/input-data/ /inwe put: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x 

Aquí, el usuario root (ya que está usando sudo) no tiene acceso al directorio /input HDFS. Como puede ver: hduser:supergroup:rwxr-xr-x dice que solo hduser tiene acceso de escritura. Hadoop realmente no respeta la root como un usuario especial.


Para solucionarlo, le sugiero que cambie los permisos en los datos locales:

 sudo chmod -R og+rx /usr/local/input-data/ 

Luego, intente de nuevo el comando put como hduser .

Inicie un shell como hduser (de root) y ejecute su comando

 sudo -u hduser bash hadoop fs -put /usr/local/input-data/ /input 

[actualización] También tenga en cuenta que el usuario hdfs es el superusuario y tiene todos los privilegios de r / w.

He resuelto este problema usando los siguientes pasos

 su hdfs hadoop fs -put /usr/local/input-data/ /input exit