Tree 在分布式文件系统上遍历文件

Tree 在分布式文件系统上遍历文件,tree,filesystems,mpi,hpc,stat,Tree,Filesystems,Mpi,Hpc,Stat,我有一个包含数亿个文件(数PB)的文件系统,我想得到几乎所有stat将返回的内容,并将其存储在某种数据库中。现在,我们有一个MPI程序,它从一个中心队列和工作节点中获取目录名,这些工作节点通过stat调用slam NFS(无需太多尝试即可处理此问题)。然后工作节点点击postgres以存储结果 虽然这样做有效,但速度非常慢。在一个现代化的30节点集群上,单次运行需要24小时以上 有没有人有什么想法来拆分目录结构而不是集中队列(我的印象是,这方面的精确算法是NP难的)?此外,我一直在考虑用Mong

我有一个包含数亿个文件(数PB)的文件系统,我想得到几乎所有stat将返回的内容,并将其存储在某种数据库中。现在,我们有一个MPI程序,它从一个中心队列和工作节点中获取目录名,这些工作节点通过stat调用slam NFS(无需太多尝试即可处理此问题)。然后工作节点点击postgres以存储结果

虽然这样做有效,但速度非常慢。在一个现代化的30节点集群上,单次运行需要24小时以上

有没有人有什么想法来拆分目录结构而不是集中队列(我的印象是,这方面的精确算法是NP难的)?此外,我一直在考虑用MongoDB的AutoShared之类的东西来取代postgres,使用多个路由器(因为postgres目前是一个巨大的瓶颈)

我只是想大致了解一下如何改进这个设置

不幸的是,使用像2.6内核审计子系统这样的东西可能是不可能的,因为要在每台运行这个文件系统的机器上运行它(从政治角度讲)是极其困难的

如果有必要的话,使用这个文件系统的每台机器(几千台)都在运行Linux2.6.x


实际的主要目的是查找早于某个日期的文件,以便我们能够删除它们。我们还希望收集有关文件系统使用情况的一般数据。

在我的评论中展开

将文件放在中心位置是最大的瓶颈之一。如果不能以其他方式优化文件系统访问时间,最好的方法可能是让一个(或两个)工作人员执行
stat
调用。通过添加两个以上的worker,您不会获得性能改进,因为他们都在访问同一个文件系统

正因为如此,我认为将worker放在文件系统所在的节点上(而不是通过NFS访问它)应该可以极大地提高性能

另一方面,可以通过更改数据库引擎来优化数据库写入。正如注释中所预期的,key-value模型更适合这样的任务(是的,it):您可以使用its来存储使用完整路径名作为键的
stat
调用的结果


此外,redis还将在不久的将来提供支持。

扩展我的评论

将文件放在中心位置是最大的瓶颈之一。如果不能以其他方式优化文件系统访问时间,最好的方法可能是让一个(或两个)工作人员执行
stat
调用。通过添加两个以上的worker,您不会获得性能改进,因为他们都在访问同一个文件系统

正因为如此,我认为将worker放在文件系统所在的节点上(而不是通过NFS访问它)应该可以极大地提高性能

另一方面,可以通过更改数据库引擎来优化数据库写入。正如注释中所预期的,key-value模型更适合这样的任务(是的,it):您可以使用its来存储使用完整路径名作为键的
stat
调用的结果


此外,redis在不久的将来也将提供支持。

我们最终为此创建了自己的解决方案(使用redis)。我们已经将运行时间从大约24小时减少到了大约2.5小时

  • 分配工作
  • 为了控制一切的工具

我们最终为此创建了自己的解决方案(使用redis)。我们已经将运行时间从大约24小时减少到了大约2.5小时

  • 分配工作
  • 为了控制一切的工具

瓶颈在哪里?数据库I/O、磁盘(即stat)I/O、处理等?此外,在MangGDB之前我会考虑使用ReDIS。它似乎是一个更适合您的用例的解决方案(最后,它取决于您将执行的查询),并且比MongoDB更快。@GaretJax目前最大的瓶颈是stat调用和db写入。我也会仔细看看redis。你的瓶颈在哪里?数据库I/O、磁盘(即stat)I/O、处理等?此外,在MangGDB之前我会考虑使用ReDIS。它似乎是一个更适合您的用例的解决方案(最后,它取决于您将执行的查询),并且比MongoDB更快。@GaretJax目前最大的瓶颈是stat调用和db写入。我还将仔细研究一下redis。我们最终使用了redis,但最终在hiredis之上实现了我们自己的“集群”层。谢谢你的建议!:-)我们最终使用了redis,但最终在hiredis之上实现了我们自己的“集群”层。谢谢你的建议!:-)