MapReduce

  目前Data的暴增量无比惊人,对于数据的存储与分析到达一个新的困境,磁盘存储增加速度很快,但是在IO方面---磁盘传输或磁盘读取却始终未能跟进磁盘容量更新的脚步,采用多磁盘并行无疑是网络数据处理的最佳模式,然而,其中有很多问题:

  1、数据分批存储在多个磁盘,如果某个设备故障,将导致数据不完整,常用解决办法采用磁盘阵列备份,虽然这样会带来一定的经济承担。

  2、有些基于统计学的数据必须在所有数据都加载之后才能显现出其所存在的科学意义,不能只单纯的处理某个节点所加载的数据单元。

  需求出现:需要一个分布式的系统,提供分批存储、阵列备份、数据分析、结果综合的海量数据处理功能。

  MapReduce:

    来源不细说,google的hadoop精髓。

  在一篇博客上看过一个外国工程师曾这样描述“MapReduce”给他不懂技术的妻子听:“你知道洋葱辣椒酱是怎么做的吧。Map(映射): 把洋葱、番茄、辣椒和大蒜切碎,是各自作用在这些物体上的一个Map操作。所以你给Map一个洋葱,Map就会把洋葱切碎。 同样的,你把辣椒,大蒜和番茄一一地拿给Map,你也会得到各种碎块。 所以,当你在切像洋葱这样的蔬菜时,你执行就是一个Map操作。在Map操作中可能会出现有个洋葱坏掉了的情况,你只要把坏洋葱丢了就行了。所以,如果出现坏洋葱了,Map操作就会过滤掉坏洋葱而不会生产出任何的坏洋葱块。Reduce(化简):在这一阶段,你将各种蔬菜碎都放入研磨机里进行研磨,你就可以得到一瓶辣椒酱了。这意味要制成一瓶辣椒酱,你得研磨所有的原料。因此,研磨机通常将map操作的蔬菜碎聚集在了一起。分布式运算就是雇佣工人,每个人都进行Map操作,直到工作台有大量洋葱和辣椒块。现在你会看到MapReduce遗漏的阶段------搅拌阶段。MapReduce将所有输出的蔬菜碎都搅拌在了一起,这些蔬菜碎都是在以key为基础的 map操作下产生的。搅拌将自动完成,你可以假设key是一种原料的名字,就像洋葱一样。 所以全部的洋葱keys都会搅拌在一起,并转移到研磨洋葱的研磨器里。这样,你就能得到洋葱辣椒酱了。同样地,所有的番茄也会被转移到标记着番茄的研磨器里,并制造出番茄辣椒酱。”

  我觉得这种分析十分有趣,也能把mapreduce的原理解释的相当清楚。以致于我觉得并不需要其他的佐证来分析MapReduce究竟是什么东西。

  因此,在熟悉Mapeduce之前,通过上面的这段话,我们可以简单的猜测一下MapReduce的行为,对MapReduce产生一个感性的认识:

    Map--->getOriginData--->spilt--->simple handle and process--->Reduce--->sort--->return result

  随后参考了在hadoop权威指南的demo-----MaxTemperature应用中的流程图为:

    Input--->getOriginData--->map(包含一个初级的数据处理过程)--->shuffle--->reduce--->traversal(遍历)&handle--->return result

  如上链式过程所描述,原始输入数据进入map()方法后,有一个初始的处理------->截取要用的数据、去除已损数据,生成键值对数据(键key->偏移量,value->数据),shuffle:中文意:改组、鬼步、洗牌、捣乱,这里是指重新排序与分组,如demo中的同年温度数据合并。

  了解清楚le流程及原理,再去看书中的代码就感觉十分简单了,MapReduce可以说是一个旧瓶装新酒的理念,分而治之,将海量数据在各个集群上处理成一个小的结果集,再reduce合并处理,这就是目前我对MapReduce的总体认识,有偏差也无所谓,随着学习的深入,会对hadoop有慢慢更全面的理解与体会。

  下次自己写一个demo在hadoop上跑一跑。

posted @ 2013-12-10 00:54  hadoop在云端  阅读(255)  评论(6编辑  收藏  举报