現在、Hadoop DFSを使用したプロジェクトに取り組んでいます。
Hadoopシェルに検索または検索コマンドがないことに気づきました。 Hadoop DFSでファイル(testfile.docなど)を検索する方法はありますか?
Hadoopはファイルコンテンツ検索をサポートしていますか?もしそうなら、それを行う方法は?たとえば、多くのWord DocファイルがHDFSに保存されているので、「コンピューターサイエンス」という単語が含まれているファイルを一覧表示したいと思います。
他の分散ファイルシステムではどうですか?ファイルコンテンツ検索は分散ファイルシステムのソフトスポットですか?
hdfs dfs -ls -R / | grep [search_term]
。データがHDFSに格納されている方法によっては、-textオプションを使用して文字列検索のdfsを実行する必要がある場合があります。私の場合、AVRO形式の一連のHDFSシーケンスファイルに毎日何千ものメッセージが保存されていました。 Edgeノードのコマンドラインから、次のスクリプトを実行します。
私が試したことがないと思われるより高速なsolr jarファイルの実装があります。
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
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 ...]]
1の場合、次のように検索できます。
hadoop -find . -name "<name_of_file>"
1.- HDFSには-find
というfindコマンドがあり、最初の例ではこれが機能します。
hdfs dfs -find /some/path/ -name "testfile.doc"
2.-コンテンツ検索の場合、ファイルを一覧表示し、結果をファイルに保存することをお勧めします
hdfs dfs -ls -R /some/path/ >> someFile
そして、次のようにそのファイルにいくつかのフィルタを配置します:
cat someFile | grep "computer science"
そして、あなたはあなたの結果を得るでしょう。
通常、ajduff574で述べられているように、hadoopでファイルを検索するときは、
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:探しているファイル。
パス:再帰的に検索する検索のパス。これにはサブフォルダーも含まれます。