我目前正在使用Hadoop DFS开展项目。
我注意到Hadoop Shell中没有搜索或查找命令。有没有办法在Hadoop DFS中搜索和查找文件(例如testfile.doc)?
Hadoop是否支持文件内容搜索?如果是这样,怎么办?例如,我有许多存储在HDFS中的Word Doc文件,我想列出哪些文件中包含“计算机科学”字样。
在其他分布式文件系统中呢?文件内容搜索是分布式文件系统的软肋吗?
答案 0 :(得分:40)
hdfs dfs -ls -R / | grep [search_term]
。答案 1 :(得分:2)
根据数据在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
答案 2 :(得分:1)
您可以将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 ...]]
答案 3 :(得分:0)
对于1,您可以这样搜索:
hadoop -find . -name "<name_of_file>"
答案 4 :(得分:0)
1.-在第一个示例中,HDFS上有一个名为-find
的查找命令,该命令有效:
hdfs dfs -find /some/path/ -name "testfile.doc"
2.-对于内容搜索,我建议列出文件并将结果保存在文件中
hdfs dfs -ls -R /some/path/ >> someFile
,然后在该文件上放置一些过滤器,例如:
cat someFile | grep "computer science"
您将得到结果。
答案 5 :(得分:0)
通常,如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: 您要查找的文件。
路径: 搜索可递归查找的路径,其中还包括子文件夹。
答案 6 :(得分:0)
我知道这是一个非常古老的话题,但当我遇到它时,我想分享我的知识。
mapReduce 作业 org.apache.hadoop.examples.Grep 可用于此目的:
Hadoop 的 Grep
var getData = (data) => {
console.log(data);
}
<Child data={this.getData} />