小白读《Google MapReduce》心得

开门见山,在接触大数据hadoop等的这几天里,各种大数据的专有名词出现在我的世界里,对各中架构、模型也开始了解。

在读《Google MapReduce》之前,对MapReduce的了解是认为它是处理海量数据的一种模型。在处理海量数据时,在Map阶段将大量的数据分发到各个服务器上,由服务器进行处理后,在Reduce阶段将处理结果汇总,最后展现出来。阅读了这篇文章后,对其模型的内部结构,行为处理更加了解,感叹功能的强大。

MapReduce对于数据的处理是通过将其处理成key/value pair,用户自定义的Map函数接收一个key/value pair,然后产生一个中间key/value pair值的集合,然后MapReduce库把所有具有相同中间key值的中间value值集合在一起后传递给reduce函数,此时用户自定义的Reduce函数接收一个中间key的值和相关的一个value值的集合,然后合并这些value值形成较小的value值的集合。

文中例举了大量的例子来理解这个原理过程,其中在以Google自身的实际情况的实现模型中,详细分析了整个集群模型的执行概况,和各分部的实现原理,例如Master数据结构、模型容错,失效方面的处理机制等等。在出现各种问题后都有相应的解决办法,展现出了MapReduce模型的强大之处。

文中对于环境的搭建,模型使用技巧以及一些宝贵的经验详细阐述,在之后我的学习实践之中之路中会更加受用。

 

 

2019/07/02

这次反复读了前三节

注意到master进程,我理解为它是这个MapReduce执行过程中的大脑,有且只有一个。

master存储着每一个Map和Reduce任务的状态,以及worker的标识(非空闲)。

master进程首先分配任务,将Map任务或Reduce任务分发给空闲的worker。在处理Map任务的worker处理完成后,将结果存储在本地磁盘,而将存储位置、大小返还给master。master再将这个位置信息分配给Reduce worker。当Map和Reduce都处理完成后,master再把全部的结果返还给用户。

master 还会定期ping每一个worker,如果再约定时间没有回应,就认为此worker故障失效,这个故障worker中正在处理以及已经处理完成的Map任务都将被重新设定为初始的状态,等待重新分配。如果是Reduce的worker故障,但任务已经完成,则不需要重新初始化,因为Reduce的任务输出存储在全局文件系统上。

既然是大脑,核心程序,为防止master失效,需要定期的将已存储的信息写入磁盘。然而现实是,由于只有一个master,所以失效,就要重新启动程序。

 

关于“Map任务产生R 个中间文件”这句话刚开始一直不理解。

R是由用户根据需求设定的值,Map根据需求将结果处理成R 个,Reduce的R 个任务分别针对Map的R汇总处理。

 

2019/07/04 再补充:

     Shuffle进程在整合数据时,描述着数据从map task输出到reduce task输入的这段过程。

       首先,map将输入的数据解析为key/value pair形式,然后由Partitioner决定将map处理结果分配给哪个相应的reduce。然后将Partitioner处理的结果,写入缓冲区等待。缓冲区只设了100M,如果内存达到80M就会发生spill(溢写)到磁盘中。在磁盘中,如果用户设定了combiner函数,就会在此时进行数据的合并。然后所有的数据文件就到放在了磁盘中,因为最终磁盘中只有一个溢写文件,所有此时会进行merge(归并)将数据化为group,这个归并是将本机中map处理不同的溢写文件归并,所有key也可能相同,此时也会调用combiner再次进行合并。

      接着,reduce 在执行之前的工作就是不断地拉取当前job里每个map 的最终结果,然后对从不同地方拉取过来的数据不断地做merge,也最终形成一个文件作为reduce的输入文件。

合并(Combine)和归并(Merge)的区别:
两个键值对<“a”,1><“a”,1>,如果合并,会得到<“a”,2>,如果归并,会得到<“a”,<1,1>>

Combiner函数 是用户自定义的函数。在每台机器的map执行完毕后,combiner在本机就进行一次整合,这样可以提高MapReduce的执行速度。

 

对于mapreduce是不是等到所有的map处理完才开始执行reduce,因为中间的shuffle进程会把所有相同的key合并,然后给reduce。但是,文中在“备用任务”小节中又描述出现“落伍者”,拉低执行效率,此时检测到mapreduce操作接近完成时,master调用备用任务执行“落伍者”的任务。那么,所谓的mapreduce接近完成是指全部进程接近完成,只剩落伍worker的map任务么?如果这样的话,那说明部分reduce大致完成,不然怎么能称是“mapreduce”程序接近完成。

那么又说明并不是等到所有map处理完,才开始处理reduce。这样说似乎也不对。

第五节的实例中,观察处理运行图像时发现,在map没有全部完成时,reduce也开始进行了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值