在Hadoop文件系统中查找文件

9

有没有一种方法可以定位Hadoop中的特定文件?

我知道,我可以使用以下命令:hadoop fs -find /some_directory

但是,是否有像这样的命令:hadoop locate some_file_name


我在另一篇帖子中回答了一个提议使用名为Schemaindex的软件来索引HDFS中所有文件名。该软件是基于Python和AdminLTE(JS)构建的。这个索引软件还利用HDFS的inotify功能实时监控HDFS。项目地址在GitHub上:schemaindex(https://github.com/qiyangduan/schemaindex)。如果有人想尝试,请按照以下步骤安装: $ pip install schemaindex $ schemaindex runserver 然后你可以创建一个数据源并"reflect"这个数据源。免责声明:我是作者,渴望有人来尝试。你可以尝试并告诉我有哪些bug。 - Qiyang Duan
2个回答

22

如果您正在寻找 Linux 命令 locate 的等价替代品,那么在 Hadoop 中不存在这样的选项。但如果您正在寻找如何查找特定文件的方法,可以使用 fs -find 命令的 name 参数来实现此目的:

hadoop fs -find /some_directory -name some_file_name

如果你正在寻找 HDFS 文件在本地文件系统中的实际位置,你可以使用fsck命令:

hdfs fsck /some_directory/some_file_name -files -blocks -locations

谢谢。第一个变量正是我要找的。 - Headmaster
有没有想法如何使用hadoop fs -find文档中所提到的“表达式”?从文档中可以看到:-find <path> ... <expression> ... :查找与指定表达式匹配的所有文件,并对它们应用选定的操作。如果未指定<path>,则默认为当前工作目录。如果未指定表达式,则默认为-print。我想使用find来识别/path1中的内容,但忽略/path1/path2。我知道我可以使用grep -v path2,但我更愿意根本不遍历该目录。 - user9074332
@user9074332 应该类似于通用的 Linux 查找命令,我想 - https://www.computerhope.com/unix/ufind.htm - Alex

1
你可以列出目录并使用grep过滤结果:
hdfs dfs -ls -R /anyDirectory/* | grep theFileNameISearch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接