我目前正在使用Hadoop DFS开展项目。
在其他分布式文件系统中呢?文件内容搜索是分布式文件系统的软肋吗?
hdfs dfs -ls -R / | grep [search_term]
。根据数据在HDFS中的存储方式,您可能需要使用-text选项将dfs用于字符串搜索。在我的例子中,我每天都在AVRO格式的一系列HDFS序列文件中存储了数千条消息。从边缘节点上的命令行,此脚本:
有一个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"
你会得到你的结果。
通常当我在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:您要查找的文件。
path:搜索以递归方式查看的路径,这也包括子文件夹。