MapReduce计算框架介绍



对大数据可以理解为 : 存储与计算 : hdfs存储 , mapreduce用来计算




MapReduce : 离线计算 移动计算而不移动数据 。把写好的程序分别拷贝到不同存在数据的主机上


可分为四个阶段 : 


一 : split : 从hdfs上存储的数据作为MapReduce的输入 ,即 MapReduce计算的是hdfs上的数据


数据分为很多片段(split0 split1 split 2),每一个片段由一个map线程去执行,而且是并发的去执行




二 :map  :  每一个split片段由一个mapTask线程去执行,而且是并发的mapTask线程去执行


map的分析是由程序员开发代码而决定的。将碎片的每个单词取出来,每个单词后面赋值1(键值对结构:单词的本身作为key,1作为value)






三 :Shuffle :合并和排序。将相同key(即单词本身)的进行合并,key相同的放到一个数据块中,作为一个集合传给reduce




四 : reduce  :  一个集合并不一定对应一个reduce。多个集合写入一个reduce要依次执行(并非并发执行)。
reduce的个数由程序定义 : 看map输出的数据有多大,越大越多。足够小甚至没有。
reduce得到的数据也是key value : key为单词本身,value为出现的次数






mapreduce最复杂的阶段 Shuffle : 


map的输出 :
 partition分区(在溢写之前)(默认分区规则:hash模运算,也可由程序员自定义。分区可解决数据倾斜。负载均衡的问题)分区不是把数据立马分开,而是打个标志段,告诉谁谁是哪个区的 。数据在fetch传输的时候才会被分开


sort排序 : 默认排序为字典排序(ascii码)(在溢写之前)


combiner : 合并单词。比如 : cat 1 , cat 1 , cat1  ------>>>   cat 3 (数据量大时候)(在溢写之前)


split to disk溢写到磁盘,在溢写过程中产生大量文件,需要combiner合并成大一点的文件(默认合并规则按照hash值合并,也可以自定义),以减少map的输出。然后fetch传输交给reduce。


map跟reduce或许不在一台机器上,不在一台机器上需要将数据拷贝到reduce所在机器上。


已做好的分区标志段写到指定的reduce中(真正分区在此起作用)




reduce : 


各个reduce需要从各台机器上的各个map上通过partition分区标志的数据拷贝过来。会产生好多小文件,
所以又进行一次合并(key 单词本身相同的进行合并,此合并不能进行人为控制)。
相同key的数据传给reduce去执行,这个过程不是并发的,但多个reduce之间是可以是并发的






说明:reduce接受map的数据是以block块为单位处理的,所以reduce输入的value为迭代器。(而不是以每条记录为单位)









  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值