我目前正在使用Hadoop DFS开展一个项目。
我注意到在Hadoop Shell中没有搜索或查找命令。有没有办法在Hadoop DFS中搜索和查找文件(例如testfile.doc)?
Hadoop支持文件内容搜索吗?如果支持,如何操作?例如,我在HDFS中存储了许多Word Doc文件,我想列出哪些文件里面含有“计算机科学”这个词语。
其他分布式文件系统呢?文件内容搜索是分布式文件系统的软肋吗?
我目前正在使用Hadoop DFS开展一个项目。
我注意到在Hadoop Shell中没有搜索或查找命令。有没有办法在Hadoop DFS中搜索和查找文件(例如testfile.doc)?
Hadoop支持文件内容搜索吗?如果支持,如何操作?例如,我在HDFS中存储了许多Word Doc文件,我想列出哪些文件里面含有“计算机科学”这个词语。
其他分布式文件系统呢?文件内容搜索是分布式文件系统的软肋吗?
hdfs dfs -ls -R / | grep [search_term]
。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 ...]]
通常在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: 递归查找的路径,包括子文件夹。
对于1,您可以这样搜索:
hadoop -find . -name "<name_of_file>"
1.- HDFS有一个名为-find
的查找命令,对于你的第一个例子,可以这样使用:
hdfs dfs -find /some/path/ -name "testfile.doc"
2.- 对于内容搜索,我建议列出文件并将结果保存在文件中
hdfs dfs -ls -R /some/path/ >> someFile
然后只需对该文件添加一些过滤器,例如:
cat someFile | grep "computer science"
然后你将获得你的结果。
我知道这是一个非常老的话题,但是当我遇到它时,我想分享我的知识。
可以使用mapReduce作业org.apache.hadoop.examples.Grep来实现此目的:
Hadoop的Grep
hadoop org.apache.hadoop.examples.Grep
Grep <inDir> <outDir> <regex> [<group>]
Generic options supported are
-conf <configuration file> specify an application configuration file
-D <property=value> use value for given property
-fs <local|namenode:port> specify a namenode
-jt <local|resourcemanager:port> specify a ResourceManager
-files <comma separated list of files> specify comma separated files to be copied to the map reduce cluster
-libjars <comma separated list of jars> specify comma separated jar files to include in the classpath.
-archives <comma separated list of archives> specify comma separated archives to be unarchived on the compute machines.
The general command line syntax is
bin/hadoop command [genericOptions] [commandOptions]