两个海量文件,每个文件都存储了100亿个URL,32位机器上计算两者重复的URL。
想到另外一个问题,如何在一个海量URL文件中,使用32位机器找出重复次数最多的那个URL。这个问题一般有几个思路,
1 遍历文件,对每个URL 哈希取模,结果存入多个小文件,再对每个小文件读入内存哈希计数得到次数最多的那一个,最后从不同文件中选出最大的那一个。
2因为内存受限,考虑到URL具有很强的规则性,比如http(ftp,https…)://www(…).xxxx.com(cn, net…)/…, 而且不应该太长,如果太长,比如都带上了执行脚本和各种参数(统计某个商品网页点击率),这个时候一般都要做关键词预处理。可以做字母树结构,遍历文件,最后输出最大的。
3 hadoop。典型的单词计数问题。
回到本问题,
1 对其中一个文件做字母树,遍历另一个文件。
2 hadoop。不过要变化一下。先分别对两个文件做一个hadoop去重,即计数,不过只输出url。然后对两个新的url文件做hadoop计数,reduce的结果中count为2的即是重复项。