• 在路上
    2021-10-02
    徐老师好,晚上试着读了下MapReduce的论文,比GFS的论文要简单很多。 问题一,如何按照域名统计访问频率?只需要把原来Map函数的输出从List<URL, “”>,变成List<domainName(URL), “”>。 问题二,如何按照访问人数对统计结构排序?假如还是统计URL的访问情况,Map函数的输出为List<URL, USER_ID>,Reduce函数对USER_ID去重,获得每个URL的访问人数。Reduce程序存在k个,不同的URL通过哈希取模的方式,也就是hash(URL) % k,分配给不同的Reduce排序。通常我们不是关心所有数据的排行情况,而是前N名的排行情况,假设N等于10000。所以每个Reduce函数只排前10000名,然后通过另一个MapReduce程序,将k个Reduce的排行结果汇总,得到全局的前10000名排行结果。

    作者回复: 第一个问题没有问题。但是第二个问题有一个挑战,就是在 “Reduce” 函数去重这里,具体怎么去重呢? 因为如果用户数量足够多,我们会遇到一种情况就是Reduce用内存来进行去重内存可能不够用,再想想。

    共 4 条评论
    
  • 那时刻
    2021-10-03
    第二个问题,URL 访问统计结果要按访问的人数多少从高到底排序。为了减少Reduce 函数去重的时候,用户数据量比较大的问题。可以通过两次map reduce操作来减少这个数据量。 1. map以(URL+UserId, 1) 作为输出,表示某个url被某个user访问过一次,reduce输出则是 (URL+UserId, 1),通过这个过程来去重用户量过大的问题。 2. 输入是过程1的结果,map的输出是(URL,1),reduce的输出则是(URL,sum())表示该url被访问的人数。按照访问的人数多少从高到底排序,输出URL即可。 如果数据量少的话,bash也可以,`cat $input | awk '{print $1" "$2}' | sort | uniq -c | awk '{print $1}' | sort | uniq -c `
    共 1 条评论
    10
  • webmin
    2021-10-03
    看到MapReduce我就会不自主的映射为递归,Map是递的过程,一路向下进行切分,Reduce是归触底向上一路进行收集。 思考题: 第二个问题与网上流传的在单机上2GB内存排序10GB大小文件的题目类似,需要通过分桶缩小每次处理的大小,按Count数划分区间,每个区间一个文件,然后再对每一个区间进行排序,最后把文件按区间顺序连在一起。这种处理过程好似快排算法,用快排来划分区间每次把数据落地进文件。
    
    5
  • Helios
    2021-10-27
    请问老师,如果所有map出来数据依然很大,在清洗的过程中的排序是磁盘操作么,是map输出到gfs然后清洗进程从gfs拷贝到磁盘么?如果数据过于大,是不是清洗也需要多台机器呢,他们之间如何沟通呢
    共 2 条评论
    2
  • 陈迪
    2021-10-06
    尝试回答下思考题: 1. 按域名统计:partition函数嵌一个获取domain的方法,论文中有描述 2. 统计结果排序:看上去写两个MapReduce Job比较清楚。第一个就是统计数量,第二个专门做排序。主要是利用shuffle之后,reduce任务会对本机的全局<key, lists>按key排序。
    
    2
  • qinsi
    2021-10-02
    想到个有些复杂的方法: 第一轮:map输出<URL+USER_ID, ''>,reduce时对value计数,可以得出每个url被每个用户访问了多少次<URL+USER_ID, visitsByUser> 第二轮:map的时候只取key中的URL部分,输出<URL, visitsByUser>,reduce时对value计数得到访问人数,把value相加得到访问频次,输出<URL, [visits, totalVisits]> 第三轮:map的时候把访问人数visits作为key,输出<visits, [URL, totalVisits]>。如果shuffle是按照key的大小shuffle的话,reduce原样输出应该就是排好序的结果了。
    共 2 条评论
    2
  • Geek_980ded
    2023-06-18 来自上海
    MapReduce过程可以理解成一群人统计选票的过程,假设有候选人A和候选人B,首先从选票箱里拿出所有的选票,分给所有初统人员,每个初统人员拿其中一摞,只要统计这一小部分中A的选票数是多少,B的选票数多少,然后把这个结果交给汇总人员。两个汇总人员分别负责合计A和B的选票。
    
    
  • Pluto
    2022-08-23 来自浙江
    第二个问题: 第一轮: map的输出是 <url + user, ''>, reduce去重得到 <url + user, ''> 第二轮: map不做处理, 输出 <url, user>, reduced得到 <url, sum> (sum 就是把 的value 相加即可) 第三轮: map输入 <url, sum>, 输出 <sum, url>,(数目应该是大大降低了,边界是所有url都被访问一次),key 如果是排序的,用单一的Reduce即可
    
    
  • Chloe
    2022-06-04
    对课后思考题,我的第一感觉是要把问题划分为小的模块,然后逐个解决。正好翻出了Design Pattern的书,看看5.10节,再回来讲感想。
    
    
  • 核桃
    2021-11-19
    现在很多人说hadoop已经快凉了~
    
    