mapreduce的思想感觉挺朴素,为啥意义如此重大
一切都要从Google发的那篇论文说起
■网友
这个意义恐怕要从分布式计算说起。我认为分布式计算的初衷是认为任务是可以分割的。大任务可以分割成多个小任务,只要小任务之间相互没有关系,那么放在不同的运算单元下面进行计算则可以大大节省计算时间。然而现实情况是,小任务之间可能存在某种相关性。举个简单的例子。我们现在有两个数列,数据量大概在100KB,我们希望得到两个数列之中最大的数返回。利用分布式的思想,我们可以将两个数列放在两个不同的计算单元,分别求出两个数列各自的最大数,然后将结果汇总再算出两数之间谁比较大返回。假设两个计算单元分享的是同一片内存(多线程编程),则计算完毕之后,任意一个计算单元可以在内存区读取两个值通过比较后返回最大值。现在我们把数组变大到10GB,并把数组数量增加到1000个。这样的数据量下面,我们一般需要计算机集群来提高计算的效率。根据前面的经验,我们可以套用一下模型,每个计算机作为一个计算单元去算一个数组,再让其中一个来汇总结果并求出最大值。可是在实际的工作做,问题并没有那么简单解决。这里我们需要考虑几个问题:当集群的计算机总数增加到一定数量的时候,任意的计算失败或者系统异常是很正常的事情。以上面最大值计算为例,对任一数组的计算失败都有可能造成最终结果的不准确。即使集群中所有的计算机都是使用完全一样的硬件配置,但是实际运算中,并不可能达到所有计算机同时计算好结果直接进入下一步汇总阶段。先算好的计算机需要等待落后的计算机,这在分布式计算中是常见的同步问题。由于计算单元本身不共享内存空间,所以各自计算结束后,要汇总的时候需要选择一台机器,把所有计算结果都发过去,然后求出最终值。MapReduce的设计,从一开始就是要让其可以运行在Commodity Server上面,允许程序运行时出现单点任务错误并且能够自动重启相应的任务。合理定义了各细小任务之间的同步或者称作数据交互的时点。抽象出来的mapper和reducer足够简单(起码在Spark出来之前如此),让分布式计算的门槛被大大降低。这才是整个MapReduce框架重要的意义所在。
■网友
分而治之,把一个大问题拆解成若干个小问题,把一个大型的计算过程拆解成若干个小型计算过程。使一个计算不局限在单台机器上,是最大的意义。很多个廉价计算机组合在一起,运算能力超过了昂贵的大型计算机。
推荐阅读
- 直击成都市郫都区核酸检测现场:众志成城抗疫情民众“感觉很安心”
- 为啥看到书柜上的藏书会有心旷神怡的感觉
- 直播会成为品牌传播的另一个途径么有哪些可行的方法感觉有戏又没头绪好捉急。
- 学的自动化却对IT比较感兴趣。。感觉对自己的专业帮助不大,好苦恼,要不要继续是专精还是学点感兴趣的?
- 国内有类似Ebay中bid(竞标)模式的网购平台吗
- 疾病|医生不避讳:4种疾病可以通过性传播,思想开放的人要小心了
- hadoop中的mapreduce链接(mapreduce chaining)怎样避免中间文件的产生
- 读书读到3分之一的时候感觉很难理解,要不要继续
- 豪车|“傻土豪”最爱的4款豪车,外国被当成垃圾车,自己却感觉高人一等
- 悬挂|试驾吉利星瑞后,感觉综合能力令人折服|车主剧场
