algorithm - Find Top 10 Most Frequent visited URl,数据跨网络存储

标签 algorithm performance distributed-system large-data

来源:谷歌面试问题

给定一个大型计算机网络,每台计算机都保存访问过的 url 的日志文件,找到访问次数最多的前 10 个 url。

有很多大<string (url) -> int (visits)> maps .

计算 < string (url) -> int (sum of visits among all distributed maps) , 并获得组合图的前十名。

主要限制: map 太大,无法通过网络传输。也不能直接使用MapReduce。

我现在遇到了很多这种类型的问题,其中处理需要在大型分布式系统上完成。我想不出也找不到合适的答案。

我所能想到的就是蛮力,它以某种或其他方式违反了给定的约束。

最佳答案

它说你不能直接使用 map-reduce,这暗示问题的作者想让你思考 map reduce 是如何工作的,所以我们只会模仿映射减少:

  1. 预处理:令 R 为集群中服务器的数量,给每个 来自 0,1,2,...,R-1 的服务器唯一 ID
  2. (map) 对于每个 (string,id) - 将元组发送到具有 id hash(string) % R 的服务器。
  3. (减少)完成第 2 步(简单的控制通信)后,为每个服务器生成前 10 个字符串的 (string,count)。请注意,那些在步骤 2 中发送到此特定服务器的元组。
  4. (map) 每个服务器会将他所有的前 10 个发送到 1 个服务器(让它成为服务器 0)。应该没问题,只有10*R条记录。
  5. (减少)服务器 0 将产生整个网络的前 10 名。

注意事项:

  • 算法的问题,就像大多数大数据算法一样 不要使用框架来处理故障服务器。 MapReduce 需要 为你照顾它。
  • 上述算法可以非常直接地转换为 2 阶段 map-reduce 算法。

关于algorithm - Find Top 10 Most Frequent visited URl,数据跨网络存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17928158/

相关文章:

algorithm - 在二维数据中查找峰值(区域)

c# - 为什么 MongoDB 中的多个 session 比一个 session 更快?

java - Java RMI 和 JMS 有什么区别?

performance - 提高 Ansible 性能

java - ListView 内的 ListView 项目

multithreading - 乐观并发控制澄清

parallel-processing - react 性和弹性之间有什么区别?

algorithm - 有效处理 "update elements"和 "get min value among all element"查询

c# - simhash函数真的那么靠谱吗?

algorithm - 潜在语义索引(LSI)是一种统计分类算法吗?