【发布时间】:2012-08-12 00:20:24
【问题描述】:
我需要对一个非常大的文件进行排序,数百 Gb。幸运的是,我可以访问 Linux MPI 集群。有人知道一个好的但最重要的工作排序程序,它可以使用 MPI 在分布式环境中运行。 实际上,我想计算该文件中的唯一行,因此如果有人知道一个程序可以做得更好。否则我以后可以自己想办法。
【问题讨论】:
-
一共有多少行?你能通过用短哈希替换行来显着减小文件的大小吗?
-
更准确地说,文件大小为 21Gb。我担心的是,即使我最终决定自己编写诸如合并排序之类的代码,我也将不得不担心 RAM 的可用性,这会使整个程序变得更加复杂。
-
可能效率较低,但方法很简单:对于
P节点,选择一个函数f,为每一行分配一个从0到P-1的数字,以便这些行或多或少均匀分布.让每个节点K计算行的出现次数,其中f(line) = K:计算唯一行而不进行排序。复杂度:N * N / (P * P)。 -
但这不只是让问题变小了一点,但并没有解决它。如果每个节点 K 计算分配给它的分区中的行数不准确,则仍然需要合并这些计数(这也涉及计数)。
-
其实我觉得我现在走在了正确的轨道上。我找到了这个网站sortbenchmark.org 并且能够下载 2004 年的获胜者(nsort)。与默认的 linux 排序相比,它的速度非常快,并且在我的文件上完成大约 10 分钟。我现在正试图找出其他获奖者是否提供了他们软件的非商业版本,因为我认为如果我能找到可以使用多个集群机器的应用程序,时间可能会更进一步