已知淘宝web服务器上有1个access日志文件,记录着用户访问的url,url总数 100 亿以上,每个 url 约占 64 字节,这些url可能存在重复,在一个内存只有2G的机器上,怎么样才能统计出访问频率最高的前100 个 URL。
100 亿 *64/1024/1024/1024=596G,可考虑分成 1000 个文件处理,每 个文件大约 600M。顺序读取文件,每行按照 hash(url)%1000 的结果将 url 写入到 1000 个文件中,这个过程是 mapreduce 中的 map。 针对每个小文件,使用 hashmap 统计每个 url 出现的次数,并使用堆排序得到访问 次数最高的前 100 个 url, 将每个文件排序好的100个url及对应的count输出到1000个文件,最后将这个 1000 个文件(此时每个文件只有 100 行 ) 进行合并排序。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。