前言
最近面试大数据工程师岗位,同一个问题被连续问了两次。题目大概是这样的:
如果你有一台机器,内存是有限的,要你统计一个很大的日志文件里的数据,比如统计UV top-N;
另外一个公司是这么问:
如果你有一台机器,内存有限,要你对某个指标做一个全局排序。比如对单词频次进行全局排序。
正文
第一种问题是比较简单的。这种问题一般都问在某个条件下如何在大数据中求出top-N。这种问题的解决方案如下步骤:
- 分而治之/hash映射。
- hash统计。
- 堆/快速/归并排序;
首先,为什么药hash映射呢?
因为,我们的目的要将一个大文件切割成N个小文件,去进行分而治之。而hash 加 取模 这种方式可以帮我们把数据
均匀随机地分布在N个地方。更重要的是,hash可以让我们把相同的东西放在同一个地方!
其实这种做法在有些地方出现过,比如Hive的bucket实现原理就是这个中道理。用hash加取模的方式保证同样的值被
分配到同一个地方。