yuedx的个人空间 https://blog.eetop.cn/317611 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Map/Reduce算法的过程

已有 7968 次阅读| 2009-5-1 16:04 |个人分类:FPGA设计

http://hi.baidu.com/wuxiaoming1733/blog/item/a860bcfbe1f1f92a4e4aeae8.html

Map/Reduce算法的过程是:

1、Partition(划分数据)
把数据划分为1000份,这个过程由Skynet自动完成

2、Map
除了划分数据,还需要把运算该数据的代码也Map到每个运算节点上面去并发执行。这1000个节点各自执行自己的任务,执行完毕以后把执行结果返回

3、Partition
这1000分执行结果需要归并,于是我们再次划分数据,比方说划分为10份,这个过程也是Skynet自动完成的

4、Reduce
把Reduce代码和Reduce数据分发到10个节点执行,每个节点执行完毕返回数据。如果需要再次Reduce可以再次执行。最终Reduce为一个总共的结果。

其 实Map/Reduce算法的原理是很简单的,好了,看看Skynet下面,我们怎么实现呢?其实我们需要编写的代码只有两个方法:一个map方法,告诉 skynet如何执行每份数据,一个reduce方法,告诉skynet如何归并每份数据,所以这个并行算法最终用Skynet来写的话,也非常简单:




Ruby代码 复制代码

  1. class MapreduceTest   
  2.    include SkynetDebugger   
  3.              
  4.   def self.map(datas)   
  5.      results = {}   
  6.      datas.each do |data|   
  7.        results[data] ||= 0   
  8.        results[data] += 1   
  9.     end                    
  10.      [results]         
  11.   end  
  12.      
  13.   def self.reduce(datas)   
  14.      results = {}   
  15.      datas.each do |hashes|   
  16.        hashes.each do |key,value|   
  17.          results[key] ||= 0   
  18.          results[key] += value   
  19.       end  
  20.     end  
  21.      results   
  22.   end  
  23. end  
class MapreduceTest include SkynetDebugger def self.map(datas) results = {} datas.each do |data| results[data] ||= 0 results[data] += 1 end [results] end def self.reduce(datas) results = {} datas.each do |hashes| hashes.each do |key,value| results[key] ||= 0 results[key] += value end end results end end

这个就是一个最简单、但是完整ruby版本的Map/Reduce代码了。我们需要编写一个map方法,告诉skynet去统计每个单词 的出现次数,我们还需要编写一个reduce方法告诉skynet去归并每个map的统计结果。好了,剩下所有的工作都归Skeynet接管了,是不是很 简单!


map/reduce的思想是非常简单的,换句话说,任何语言都能实现。google的map/reduce之所以出名,不是因为这个思想多巧 妙,而是因为它把分布式计算用一种非常简易的方式总结了出来。任何分布式计算,最核心的任务都是:1 任务划分 2 数据归并,如果不能对任务划分,那么用什么分布式框架都是没用的。比如对超大型矩阵的聚类计算,如果算法本身无法划分,那么根本没办法分布式。所以一切涉 及到分布式的问题,划分是最重要的。

点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 13

    粉丝
  • 1

    好友
  • 35

    获赞
  • 156

    评论
  • 4698

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-9 20:07 , Processed in 0.013533 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部