Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 在Hadoop中搜索/查找文件和文件内容_File_Filesystems_Hadoop_Distributed_Distributed Computing - Fatal编程技术网

File 在Hadoop中搜索/查找文件和文件内容

File 在Hadoop中搜索/查找文件和文件内容,file,filesystems,hadoop,distributed,distributed-computing,File,Filesystems,Hadoop,Distributed,Distributed Computing,我目前正在从事一个使用Hadoop DFS的项目 我注意到Hadoop Shell中没有搜索或查找命令。有没有办法在Hadoop DFS中搜索和查找文件(例如testfile.doc) Hadoop支持文件内容搜索吗?如果是,怎么做?例如,我有许多Word文档文件存储在HDFS中,我想列出哪些文件中有单词“computer science” 在其他分布式文件系统中呢?文件内容搜索是分布式文件系统的一个软肋吗 您可以这样做:hdfs dfs-ls-R/| grep[search\u term] 听

我目前正在从事一个使用Hadoop DFS的项目

  • 我注意到Hadoop Shell中没有搜索或查找命令。有没有办法在Hadoop DFS中搜索和查找文件(例如testfile.doc)

  • Hadoop支持文件内容搜索吗?如果是,怎么做?例如,我有许多Word文档文件存储在HDFS中,我想列出哪些文件中有单词“computer science”

  • 在其他分布式文件系统中呢?文件内容搜索是分布式文件系统的一个软肋吗

  • 您可以这样做:
    hdfs dfs-ls-R/| grep[search\u term]
  • 听起来MapReduce工作可能适合这里。类似的东西,但用于文本文件。但是,如果这些文档很小,您可能会遇到效率低下的问题。基本上,每个文件将分配给一个映射任务。如果文件很小,与处理文件所需的时间相比,设置映射任务的开销可能很大
  • 您可以与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 jar search-mr-job.jar org.apache.solr.hadoop.HdfsFindTool-find/user/hive/tmp-mtime 7
    用法:hadoop fs[通用选项]
    [-查找……]
    [-help[cmd…]]
    [-用法[cmd…]]
    
    根据数据在HDFS中的存储方式,您可能需要在dfs中使用-text选项进行字符串搜索。在我的例子中,每天有数千条消息以AVRO格式存储在一系列HDFS序列文件中。从边缘节点上的命令行,此脚本:

  • 在/data/lake/raw目录的第一级搜索列表 文件的数量
  • 将结果传递给awk,awk输出第6列和第8列(日期和文件 (姓名)
  • Grep输出带有问题文件日期的行(2018-05-03)
  • 将包含两列的行传递给awk,awk只输出第2列, 文件列表
  • 使用while循环读取,该循环接受每个文件名,并提取 它以文本形式从HDFS中删除
  • 文件的每一行都用灰色表示字符串“7375675”
  • 符合条件的行输出到屏幕(标准输出)
  • 有一个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
    

    对于1,您可以这样搜索:

    hadoop -find . -name "<name_of_file>"
    
    hadoop-find-名称“”
    
    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-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" hdfs dfs-cat$(hdfs dfs-ls-R$path | grep“$file_pattern”| awk'{print$8}')| grep“$search_pattern” 搜索模式: 您正在文件中查找的内容

    文件格式: 您正在查找的文件

    路径:
    递归搜索的路径,也包括子文件夹。

    我知道这是一个非常古老的主题,但当我遇到它时,我想分享我的知识

    mapReduce作业org.apache.hadoop.examples.Grep可用于此目的:

    Hadoop的

    hadoop org.apache.hadoop.examples.Grep
    Grep[]
    支持的通用选项包括
    -conf指定一个应用程序配置文件
    -D使用给定属性的值
    -指定一个namenode
    -jt指定一个ResourceManager
    -文件指定要复制到map reduce群集的逗号分隔文件
    -libjar指定要包含在类路径中的逗号分隔的jar文件。
    -归档文件指定在计算机上未归档的逗号分隔归档文件。
    一般的命令行语法是
    bin/hadoop命令[genericOptions][commandOptions]
    
    也许我还应该提到,Lucene()可以做索引和搜索,我认为有一个Word文档插件。你也许可以把东西装配在一起。我认为Lucene+Hadoop已经做了一些工作。谢谢你的回复。但是hadoop dfs-lsr/| grep[search_term]对许多文件或目录不是很慢吗?它肯定不快,但也不算太差。在我们的群集上,有>100000个文件,仍然需要不到一分钟的时间,我认为这是可以接受的。@@ajduff574我认为resursive list lsr命令不使用任何map/reduce函数来进行搜索,对吗?为什么hadoop不支持元数据级别的搜索?因为所有的元数据都存储在Namenode的RAM中,对吗?我在另一篇帖子()中回答说,我建议使用一个名为Schemaindex的软件对hdfs中的所有文件名进行索引。该软件基于python和adminlte(js)构建。该索引软件还利用HDFS的inotify功能实时监控HDFS。该项目位于github:schemaindex()上。如果有人想尝试它,可以通过以下方式安装:$pip install schemaindex$schemaindex runserver,然后可以创建一个数据源并“反映”该数据源。免责声明:我是作者,不幸的是,它似乎没有输出包含搜索词的实际文件,因此它可能对您的情况没有真正的帮助。
    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]