MapReduce学习笔记

MapReduce学习笔记

mapreduce提供了简洁的编程接口,对某个计算任务来说,其输入是key/value数据对,输出也以key/value形式表示。开发只需实现Map和reduce两个接口函数内的具体操作内容,即可完成大规模数据的并行批处理任务。
map函数以key/value数据对作为输入,将输入数据经过业务逻辑计算产生若干仍以key/value形式表达的中间数据。mapreduce计算框架自动将中间结果中相同key的记录进行聚集。并将数据传送给reduce函数内定义好的处理逻辑作为其输入值。
reduce函数接收到map阶段传过来的某个key值及其对应的若干value值等中间数据,函数逻辑对这个key对应的value内容进行处理,一般是对其进行累加、过滤、转换等操作,生成key/value形式的结果作为最终结果。
介绍了一点理论以后,杰哥要举栗子啦^-^虽然杰哥爱健身,但是太沉的栗子也举不动~~
例1,单词统计
杰哥有一天收集了感兴趣的互联网网页内容(文档),发现居然有13亿个(哇塞,每位中国人送一个^-^),这么多,想要统计下每个单词的出现次数,快速浏览一遍都要累嗝屁了。。。还好有mapreduce兄,他就说了,放开那个单词妹子让我来:

map(String key,String value){  //产生中间数据<w,1>
  //key 网页名
  //value 网页内容
  for each word w in value
    emit Intermediate(w,“1”);
}  
reduce(String key,Iterator values){
  //key 单词
  //values 出现次数列表
  int result = 0for each v in values;
    result += ParseInt(v);
  emit(AsString(result));  
}

例2,pv统计
杰哥实习的时候经常接触到一个词较做pv,即页面点击数,对log统计pv如何进行呢?mapreduce兄又来了

map(String tuple_id,String tuple){
   emit Intermediate(url,“1”); 
}
reduce(String url,Iterator list_tuples){
  int result = 0;
  for each v in list_tuples;
    result += ParseInt(v);
  emit(AsString(result));
}

mapreduce处理流程:
1.mapreduce框架将应用的输入数据切分成M个数据块,一般每个大小64MB,启动集群中不同机器上的若干程序
2.唯一的主控(master)为若干worker分配map或者reduce任务,并进行全局管理
3.进行map的worker读取对应的数据块内容,从数据块中解析出一个个key/value记录数据并传给map函数,map处理后输出key/value中间结果缓存于内存中
4.缓存的中间结果周期性的被写入本地磁盘,每个中间结果在写入磁盘前被分割(partition)成R份,例如通过key对R进行哈希取模,每一份对应一个reduce的数据分片临时文件,map处理完后通知master,由master转交给reduce中的worker
5.shullfe阶段:当某个reduce接收到master通知时,就通过RPC远程调用将map产生的属于自己的数据文件远程取(pull)到本地。只有所有map完成时,reduce才能启动。所有中间数据拉取成功后,reduce根据中间数据的key进行排序,将相同的key聚合在一起,注意,reduce采取主动接收数据方式,即pull,这样某个reduce失败后直接重新执行这个reduce即可。reduce任务的worker遍历完中间结果并排序后,将同一个key及其对应的多个value传递给reduce函数进行计算
6.所有map和reduce执行完后,master唤醒用户应用程序,mapreduce调用结束。

一般情况,在map后加入combiner对一个map内的结果先进行聚合,以减少map和reduce之间的通信代价,也可以在map中集成combiner的功能,减少i/o代价。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值