一个大数据排序问题的巧妙解法

今天工作中遇到一个问题:

要求对28G的数据排序,数据的格式如下:

id  time

要求按时间升序排序

已有的资源为64G内存,32核的服务器一台,需要在一个晚上(8小时)内跑出排序结果。

一个直观的解法就是把数据全部加载进内存,然而实际操作并不可行,才加载了1/10不到的数据就已经使用了接近40G的内存了。
另一个解决思路是手动进行map reduce,分成若干小模块,小模块排序之后再逐一合并。这个思路实现起来代价也很高,逐一合并无法利用32核GPU,速度估计不达标。充分利用CPU的话,调度策略编码量估计不小……

最后我们找到了一个超级巧妙的解决方案:

按照日期划分文件,每天的数据单独输出成一个文件,由于我们的数据只是1~8月份的数据,故只划分为240多个文件,
每个文件只有119M,然后利用多核特性对每个文件进行排序,排好序后按文件名收尾连接就好了。

桶排序思想,好巧妙!

posted @ 2016-09-21 21:16  MindProbe  阅读(3848)  评论(2编辑  收藏