Eliminación de archivos en HDFS usando Python Snakebite

Requisito previo: instalación de Hadoop , HDFS

Python Snakebite es una biblioteca de Python muy popular que podemos usar para comunicarnos con HDFS. Usando la biblioteca de cliente de Python proporcionada por el paquete Snakebite, podemos escribir fácilmente código de Python que funcione en HDFS. Utiliza mensajes protobuf para comunicarse directamente con NameNode. La biblioteca de cliente de python funciona directamente con HDFS sin realizar una llamada del sistema a hdfs dfs. Snakebite no es compatible con python3 .  

Eliminación de archivos y directorios

En Python Snakebite existe un método llamado delete() a través del cual podemos eliminar fácilmente los múltiples archivos o directorios disponibles en nuestro HDFS. Usaremos la biblioteca cliente de python para realizar la eliminación. Entonces, comencemos con la práctica.  

Todo el Hadoop Daemon debería estar funcionando. Puede iniciar Hadoop Daemons con la ayuda del siguiente comando.

start-dfs.sh             // start your namenode datanode and secondary namenode

start-yarn.sh            // start resourcemanager and nodemanager

Tarea: Eliminación recursiva de archivos y directorios disponibles en HDFS (en mi caso, estoy eliminando los directorios ‘/demo/demo1’ y ‘/demo2’).

Paso 1: veamos los archivos y el directorio que están disponibles en HDFS con la ayuda del siguiente comando.

hdfs dfs -ls /

En el comando anterior, hdfs dfs se usa para comunicarse particularmente con el sistema de archivos distribuidos de Hadoop. ‘ -ls / ‘ se usa para enumerar el archivo presente en el directorio raíz. También podemos consultar los archivos disponibles manualmente en HDFS.

Paso 2: Cree un archivo en su directorio local con el nombre remove_directory.py en la ubicación deseada.

cd Documents/                  # Changing directory to Documents(You can choose as per your requirement)

touch remove_directory.py      # touch command is used to create file in linux enviournment. 

Paso 3: Escriba el siguiente código en el   archivo python remove_directory.py .

Python

# importing the package
from snakebite.client import Client
  
# the below line create client connection to the HDFS NameNode
client = Client('localhost', 9000)
  
# The /demo/demo1 and /demo2 directory's will be removed from HDFS 
for p in client.delete(['/demo', '/demo2'], recurse=True):
    print p

En el programa anterior, recurse=True indica que el directorio se eliminará recursivamente, lo que significa que si el directorio no está vacío y contiene algunos subdirectorios, esos subdirectorios también se eliminarán. En nuestro caso, /demo1 se eliminará primero y luego se eliminará el directorio    /demo .

Explicación del método Client():

El método Client() puede aceptar todos los argumentos enumerados a continuación:

  • host (string): Dirección IP de NameNode.
  • port(int): puerto RPC de Namenode.
  • hadoop_version (int): versión del protocolo Hadoop (por defecto es: 9)
  • use_trash (booleano): use la papelera al eliminar los archivos.
  • uso_efectivo (string): usuario efectivo para las operaciones de HDFS (el usuario predeterminado es el usuario actual).

En caso de que no se encuentre el nombre de archivo que estamos especificando, el método delete() arrojará FileNotFoundException . Si el directorio contiene algún subdirectorio y no se menciona recurse=True , el método delete() lanzará  DirectoryException .

Paso 4: Ejecute el archivo remove_directory.py y observe el resultado.

python remove_directory.py  // this will remove directory's recursively as mentioned in delete() argument

En la imagen de arriba, ‘resultado’: True indica que hemos eliminado con éxito el directorio.

Paso 5: podemos verificar que los directorios se eliminen o que no se visiten manualmente o con el siguiente comando.

hdfs dfs -ls /

Ahora podemos ver que /demo y /demo2 ya no están disponibles en HDFS.

Publicación traducida automáticamente

Artículo escrito por dikshantmalidev y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *