Подтвердить что ты не робот

Поиск/Поиск файла и содержимого файла в Hadoop

В настоящее время я работаю над проектом с использованием Hadoop DFS.

  • Я заметил, что в Hadoop Shell нет команды поиска или поиска. Есть ли способ поиска и поиска файла (например, testfile.doc) в Hadoop DFS?

  • Поддерживает ли Hadoop поиск содержимого файла? Если да, то как это сделать? Например, у меня есть много файлов Word Doc, хранящихся в HDFS, я хочу указать, какие файлы имеют в них слова "компьютерная наука".

В других распределенных файловых системах? Является ли содержимое файла поиска мягким пятном распределенных файловых систем?

4b9b3361

Ответ 1

Ответ 2

В зависимости от того, как данные хранятся в HDFS, вам может понадобиться использовать опцию -text для dfs для поиска строки. В моем случае у меня ежедневно хранились тысячи сообщений в виде последовательности файлов HDFS в формате AVRO. Из командной строки на граничном узле этот скрипт:

  1. Выполняет поиск в каталоге /data/lake/raw на первом уровне списка файлов.
  2. Передает результат в awk, который выводит столбцы 6 & 8 (дата и файл имя)
  3. Grep выводит строки с указанной датой файла (2018-05-03)
  4. Пропускает эти строки с двумя столбцами в awk, который выводит только столбец 2, список файлов.
  5. Это читается с помощью цикла while, который принимает каждое имя файла, извлекает это из HDFS как текст.
  6. Каждая строка файла содержит строку "7375675".
  7. Строки, соответствующие этим критериям, выводятся на экран (стандартный вывод)

Существует реализация 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

Ответ 3

Вы можете использовать hadoop.HdfsFindTool с помощью solr, быстрее, чем "hdfs dfs ls -R" и более полезно.

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

Usage: hadoop fs [generic options]
    [-find <path> ... <expression> ...]
    [-help [cmd ...]]
    [-usage [cmd ...]]

Ответ 4

Для 1 вы можете искать так:

hadoop -find . -name "<name_of_file>"

Ответ 5

1.- В вашем первом примере есть команда find под названием -find, которая работает:

hdfs dfs -find /some/path/ -name "testfile.doc"

2.- Для поиска контента я бы предложил перечислить файлы и сохранить результат в файл.

  hdfs dfs -ls -R /some/path/ >> someFile

а затем просто добавьте несколько фильтров в этот файл, например:

  cat someFile | grep "computer science"

И ты получишь свой результат.

Ответ 6

Обычно, когда я ищу файлы в hadoop, как указано в ajduff574, это делается с помощью

hdfs dfs -ls -R $path | grep "$file_pattern" | awk '{print $8}'

Этот код просто распечатывает путь для каждого шаблона и затем может использоваться для дальнейшей обработки, если вы хотите выполнить поиск в содержимом файлов. Пример:

hdfs dfs -cat $(hdfs dfs -ls -R $path | grep "$file_pattern" | awk '{print $8}') | grep "$search_pattern"

search_pattern: Содержимое, которое вы ищете в файле

file_pattern: Файл, который вы ищете.

дорожка: Путь для поиска, чтобы просмотреть рекурсивно, это также включает в себя подпапки.