实例阐述MapReduce中的基本概念
来源:互联网 发布:马勒第六交响曲知乎 编辑:程序博客网 时间:2024/06/06 08:54
MapReduce是一种全新的编程模型,对于第一次接触MapReduce的人来讲,其中有些概念不是很容易理解。本文将运用一个实例来阐述MapReduce中涉及到的基本概念,包括InputSplit, Mapper, Combiner, Shuffle, Reducer。不足之处还请高手指正。
假设现在高考成绩出来了,领导让你统计学校有多少考生上了一本线,考生的成绩打印在20张纸上。格式如下:
姓名 成绩张三 600李四 580王五 610...
你找来了4位学生(甲乙丙丁)来帮忙。首先,你把20张成绩单分成了4份,每份交给1位学生,同时还给了他们一张白纸。你告诉他们,数一下有多少人过了一本线,把结果用“正”字的形式写在白纸上,完成后把结果交还给你。等到4位学生都完成后,你数一下有多少个“正”字就统计出多少考生上了一本线。
在这个例子中,
- 把成绩分成4份就类似于Hadoop在处理数据时将输入数据分成多个InputSplit。
- 每份成绩单交给一位学生来统计就类似于Hadoop将每个InputSplit分配给一台机器去处理。
- 每位学生在统计成绩时,将原始的成绩转换为“正”字就是Mapper。
- 你在拿到了所有学生的统计结果后,通过数有多少个“正”字,就是Reducer。
假设领导让你统计有多少考生上了一本线,有多少考生上了二本线而没有上一本线,同时又有多少考生上了三本线而没有上二本线。你觉得这有点复杂了,所以除了前面的4位学生(甲乙丙丁)外,你又另外找了3位学生(ABC)来帮忙。你还是先把成绩分成4份,分别交给前面甲乙丙丁,同时给了他们每人三张白纸,告诉他们分别在每张白纸上用“正”字的形式统计上了一本线、二本线和三本线的人数。待完成后,将包含有一本考生的人数的纸交给学生A,二本考生的人数的纸交给学生B,三本学生的人数交给学生C。学生ABC在拿到甲乙丙丁的结果后,学生A统计有多少考生上一本线,学生B统计有多少考生上了二本线,学生C统计有多少考生上了三本线。而你在分配完任务后就在旁边喝茶,等到学生ABC向你报告结果。
在这个例子中:
- 学生甲乙丙丁所做的事情依然Mapper。
- 学生甲乙丙丁将其统计结果分别交给学生ABC的过程就是Shuffle。
- 学生ABC所做的事情就是Reducer。
如果学生ABC抗议说,能不能让学生甲乙丙丁先数一下“正”字,然后告诉他们一个结果,这样他们在统计最终结果时就会更快一些,这就是Combiner。Combiner就是Mapper完成任务后先把结果做进一步的处理后再交给Reducer。需要注意的是,并不是每种任务都能有Combiner,如果我们统计上了一本线考生的平均成绩,Combiner就不能用了,因为只有等到所有考生的成绩都统计完了之后才能计算平均值。
从上面的例子中看到,学生甲乙丙丁都将其统计的一本成绩交给学生A,在Hadoop中也是一样,所有Mapper处理后的结果,同一个Key的结果只能交给一个Reducer,原因是Reducer要拿到同一个Key的所有结果才能运行。
后记:领导知道你这样统计结果后大怒,这点小事还要找那么多学生来帮忙,遂一怒之下将你解雇了。后来统计局知道后,这就是我们要找的处理大数据人才啊,然后你就直接进了统计局工作了。
- 实例阐述MapReduce中的基本概念
- MapReduce基本概念
- 用JavaScript阐述MapReduce原理
- YII中的JQuery阐述
- 一句话阐述Haskell基本概念---个人翻译
- 搜索学习基础--基本概念的简单阐述
- MapReduce实例
- mapreduce实例
- 进一步阐述C#中的委托
- Hadoop生态系统介绍及HDFS与MapReduce原理详细阐述
- 实例阐述浮点数解包运算过程
- 阐述游戏关卡设计中的色彩理论
- 具体阐述windows Azure 中的web role
- MongoDB mapReduce 实例
- HBase MapReduce实例分析
- 一个Mapreduce 实例
- hadoop MapReduce实例解析
- MapReduce实例分析
- python学习_多线程
- 二叉树建立、遍历(前序,中序,后序),求叶节点个数,求节点个数
- RMAN进行备份恢复
- 字符串复制问题(一)
- 软件开发项目进度控制浅谈
- 实例阐述MapReduce中的基本概念
- Tales of Mystery and Imagination——2、The Black Cat
- C++ Static
- jquery瀑布流插件
- Segments by ITL Waits 问题及解决
- svn地址
- Windows 8 的程序兼容性助手方案详述
- HTTP协议详解--出自“小坦克”blog(软件测试)
- java 可重启线程及线程池类的设计