Saltar al contenido

Buscar/Encontrar un archivo y contenido de archivo en Hadoop

Posteriormente a investigar en diferentes repositorios y foros al concluir hallamos la resolución que te compartimos a continuación.

Solución:

  1. Puedes hacerlo: hdfs dfs -ls -R / | grep [search_term].
  2. Parece que un trabajo de MapReduce podría ser adecuado aquí. Aquí hay algo similar, pero para archivos de texto. Sin embargo, si estos documentos son pequeños, puede encontrarse con ineficiencias. Básicamente, cada archivo se asignará a una tarea de mapa. Si los archivos son pequeños, la sobrecarga para configurar la tarea del mapa puede ser significativa en comparación con el tiempo necesario para procesar el archivo.

Puede usar hadoop.HdfsFindTool con solr, es más rápido que ‘hdfs dfs ls -R’ y más útil.

hadoop jar search-mr-job.jar org.apache.solr.hadoop.HdfsFindTool -find /user/hive/tmp -mtime 7

Usage: hadoop fs [generic options]
    [-find  ...  ...]
    [-help [cmd ...]]
    [-usage [cmd ...]]

Dependiendo de cómo se almacenen los datos en HDFS, es posible que deba usar la opción -text para dfs para un string búsqueda. En mi caso tenía miles de mensajes almacenados diariamente en una serie de archivos de secuencias HDFS en formato AVRO. Desde la línea de comandos en un nodo perimetral, este script:

  1. Busca en el directorio /data/lake/raw en su primer nivel una lista de archivos.
  2. Pasa el resultado a awk, que genera las columnas 6 y 8 (fecha y nombre de archivo)
  3. Grep genera líneas con la fecha del archivo en cuestión (2018-05-03)
  4. Pasa esas líneas con dos columnas a awk, que genera solo la columna 2, la lista de archivos.
  5. Eso se lee con un bucle while que toma cada nombre de archivo y lo extrae de HDFS como texto.
  6. Cada línea del archivo está grep-ed para string “7375675”.
  7. Las líneas que cumplen ese criterio se muestran en la pantalla (stdout)

Hay una implementación de archivo jar de solr que supuestamente es más rápida que no he probado.

hadoop fs -ls /data/lake/raw | awk 'print $6"   "$8' | grep 2018-05-03 | awk 'print $2' | while read f; do hadoop fs -text $f | grep 7375675 && echo $f ; done

Recuerda que tienes la capacidad de comentar tu experiencia si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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