我有一个相当大的文本文件(19Gb,十亿行)和一个运行 Ubuntu 12.04 的相当大的服务器(16 核,64Gb 内存)来对其进行排序。
使用命令行sort
实用程序(来自 GNU 核心实用程序)快速排序该文件的最佳方法是什么?
我相信我可以使用--parallel 15
(留下一个核心空闲),可以使用诸如1,可以用来-T /run/shm/sortTmp
将临时文件保存在 RAM 磁盘上之类的东西(所以速度很快)-S 50G
利用可用内存,并可以进行调整--batch-size=15
以减少临时文件的使用(这里我不确定一个好的值是多少..)。
还有其他选择可以考虑吗?什么是好的选择--batch-size
?我还应该考虑其他事情吗?
当我进行排序时,机器上不需要运行任何其他东西,因此我可以使用它的所有资源。
1 -S
与临时文件的 ram 磁盘结合使用是一个坏主意!sort
当内核写入 RAM 磁盘并且内存几乎已满时,内核可能会杀死(请参阅这条评论)
答案1
没有人回答,所以这就是我所做的:
sort -T /mnt/tmp --parallel=14 -S 50G myBigFile.txt
我没有使用,--batch-size
因为我不确定什么是一个好的价值,而且大概sort
是很聪明的。
/mnt
安装在一个大的临时磁盘上(该机器是云中的虚拟机)。如果/tmp
位于有足够空间的磁盘上,则可以省略-T
.如果您有一个非常快且有足够空间的磁盘,请使用它。
如果我没记错的话,它再次需要与要排序的文件的大小相同的空间 - 基本上它将文件分成两个或多个块,每个块都可以在内存中排序,将它们存储在临时磁盘中,然后执行合并排序以产生最终输出。