es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Hadoop descomprime archivos en un directorio y los mueve individualmente a otra carpeta.

Estoy intentando descomprimir cientos de archivos en HDFS y moverlos individualmente a otra carpeta para que puedan cargarse en una tabla externa en Hive. Intenté el siguiente comando, pero solo dio como resultado 1 archivo unido sin nombre en el directorio de destino.

!hdfs dfs -cat /user/[somedir1]/* | hadoop fs -put - /user/[somedir2]/uncompressed/

Necesito (por ejemplo) que 100 archivos comprimidos sean descomprimidos y que cada uno de estos archivos descomprimidos se mueva a la carpeta de destino individualmente con fines de depuración. No puedo usar otro lenguaje de programación ya que hará que el proyecto sea más complicado de lo necesario. Creo que esto se puede hacer usando la línea de comandos de hdfs, simplemente no conozco la sintaxis correcta en una línea.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, puede utilizar una combinación de comandos hdfs dfs y un bucle for en la shell de Bash. Aquí está el comando de una sola línea que debería funcionar para usted:

    for file in $(hdfs dfs -ls /user/[somedir1]/*.gz | awk '{print $8}'); do hdfs dfs -text $file | hadoop fs -put - /user/[somedir2]/uncompressed/${file##*/}; done
    

    El comando anterior hará lo siguiente:

    • Listará todos los archivos .gz en el directorio /user/[somedir1] usando el comando hdfs dfs -ls.
    • Extraerá la ruta de cada archivo utilizando awk.
    • Iterará a través de cada archivo usando el bucle for.
    • Leerá el contenido de cada archivo usando el comando hdfs dfs -text.
    • Descomprimirá el contenido usando el comando hadoop fs -put y lo guardará con el mismo nombre de archivo (menos la extensión) en el directorio /user/[somedir2]/uncompressed.

    Nota: Reemplace [somedir1] y [somedir2] con los nombres de directorio reales en su sistema de archivos distribuido HDFS.

Comments are closed.