遍历分布式文件系统上的文件

时间:2011-08-04 21:48:31

标签: tree filesystems mpi hpc stat

我有一个包含几亿个文件(几PB)的文件系统,我想得到几乎所有stat返回的内容并将其存储在某种数据库中。现在,我们有一个MPI程序从中央队列和工作节点提供目录名称,这些节点使用stat调用来抨击NFS(可以处理这个而不用太费劲)。然后工作节点点击postgres来存储结果。

虽然这有效,但速度很慢。在现代30节点集群上,单次运行将花费超过24小时。

有没有人有任何关于拆分目录结构的想法,而不是拥有一个集中的队列(我的印象是确切的算法是NP难的)?此外,我一直在考虑使用MongoDB与几台路由器进行自动交换来替换postgres(因为postgres目前是一个巨大的瓶颈)。

我几乎只是在寻找有关如何改进此设置的想法。

不幸的是,使用类似2.6内核审计子系统的东西可能是不可能的,因为在每个碰到这个文件系统的机器上运行它会非常困难(以政治方式)。

如果重要,使用这个文件系统的每台机器(几千台)都在运行linux 2.6.x。

实际的主要目的是查找超过特定日期的文件,以便我们能够删除它们。我们还想收集有关如何使用文件系统的一般数据。

2 个答案:

答案 0 :(得分:1)

扩展我的评论。

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

因此,我认为将工作者放在文件系统所在的节点上(而不是通过NFS访问它)应该可以提高性能。

另一方面,可以通过更改数据库引擎来优化数据库写入。正如评论中所预期的那样,Redis键值模型更适合这样的任务(是的,它is pretty fast):您可以使用其hash type来存储{clustering的结果1}}使用完整路径名作为密钥进行调用。

此外,redis还将在不久的将来支持{{3}}。

答案 1 :(得分:0)

我们最终为此创建了自己的解决方案(使用redis)。我们把时间从大约24小时缩短到大约2.5小时。