В зависимости от того, как данные хранятся в HDFS, вам может понадобиться использовать параметр -text для dfs для поиска строк. В моем случае у меня ежедневно хранились тысячи сообщений в виде последовательности файлов HDFS в формате AVRO. Из командной строки на граничном узле этот скрипт:
- Поиск в каталоге / data / lake / raw на первом уровне списка
файлов.
- Передает результат в awk, который выводит столбцы 6 и 8 (дата и файл
имя)
- Grep выводит строки с указанной датой файла (2018-05-03)
- Передает те строки с двумя столбцами в awk, который выводит только столбец 2,
список файлов.
- Это читается с помощью цикла while, который принимает каждое имя файла, извлекает
это из HDFS как текст.
- Каждая строка файла содержит строку "7375675".
- Строки, соответствующие критериям, выводятся на экран (стандартный вывод)
Существует реализация jar-файла solr, которая предположительно быстрее, я не пробовал.
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