A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wuddd 高级黑马   /  2013-4-29 00:29  /  5350 人查看  /  23 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴超老师 于 2013-4-29 00:37 编辑

    hadoop是做大数据的分布式存储与计算,“存储”相对较简单;复杂的是“计算”,即MapReduce。因为这里的“计算”是分布式的,理解起来和原来我们课程中的思路不一样。

    我在一篇帖子中讲了下Map、Reduce到底是什么。零基础的学员,看了后应该有个感性的认识。

    今天稍微深入的讲一下MapReduce计算的核心内容。所谓核心内容,是因为理解了它,就可以理解如何写MapReduce算法。如果不理解,你只能看懂书上是这么写的,不明白为什么,自己也不会写!今天我就是来答疑解惑的。

    不废话,看下文:

         
   
    这张图(神啊,请原谅我拙劣的画图水平吧)就是MapReduce算法的整个流程,包括五个阶段,按照从上到下的顺序依次执行,数据也是按照这个方向传递。我下面一步步讲述。

    既然谈到算法,那么就有输入和输出。输入作为流程的开始,输出作为流程的结束。第一阶段就是输入,第五阶段就是输出部分。以下只看第二、三、四阶段的内容。

    第二阶段,是我们要写的一个类,就是自定义的Mapper类,这个类继承自框架的某个包路径下的Mapper类,我们要做的是覆盖里面的mapper方法。关键之处就是要覆盖的这个mapper方法。这个方法的参数负责接收输入数据,即图中的k1和v1(分别什么含义不要深究);返回值表示输出,即图中的k2和v2(分别什么含义不要深究)。说到这里,只需要知道,负责输入的是k1、v1,负责输出的是k2、v2。那么,我们覆盖mapper方法时,要写的代码就是如何把k1、v1转换为k2、v2。你就简单的理解成我们平时写的有形参、返回值的方法。如果能听懂我说的这些,那我就讲清楚了。关于k1、v1、k2、v2不需要了解含义,只知道负责输入和输出就可以了,理解以下内容时也是一样。

    第三阶段,是shuffer过程,“过程”指的是很多代码很多代码在执行。那么,shuffle过程到底干了什么哪?现在简单的讲,shuffle会把阶段二中输出进行一些列处理,再送到阶段三,成为阶段三的输入。理解到这里就够了。这个过程是分布式的,是框架内部做的,我们程序员没有办法干涉!

    第四阶段,是我们要写的一个类,就是自定义的Reducer类,这个类继承自框架的某个包路径下的Reducer类,我们要做的是覆盖里面的reduce方法。关键之处就是要覆盖的这个reduce方法。这个方法的参数k2、list(v2)负责接收shuffle处理的结果,返回值是k3、v3。我们要做的是自己写代码如何把k2、list(v2)转化成k3、v3。

    看到这里,大家注意到没有,第三阶段中shuffle过程接收到的是k2、v2,输出的却是k2、list(v2),也就是把具有相同k2的所有v2进行了一次合并,放到了一个list中。这就是shuffle过程的归并逻辑,也就是框架自己带的功能。目前不要去研究shuffle过程,理解到这里就足够了。

    第四阶段的k3、v3其实就是输出的内容了,也就是计算的结果。

    通过上面的讲解,大家可以看到,程序员要做的事情就是覆盖了map方法和reduce方法。通过覆盖这两个方法,把阶段一的输入变成了阶段五的输出。换句话说,通过覆盖这两个方法, 把k1、v2(来自于输入)变成了k3、v3(走到了输出部分)。继续跟着我的思路走,输入的内容肯定是我们已知的文件,我们知道什么格式、什么内容;输出的文件是什么格式也知道,只是不知道输出的具体内容是什么而已,对吧!换句话说,即k1、v1、k3、v3是已知的,我们程序员要做的是实现k2、v2。说到这里,有同学想:知道输入和输出,求中间过程,写一个方法不就行了吗?为什么要写map、reduce两个方法???这就是框架的精华所在、精髓所在!!!写这个框架的人肯定比我们聪明,我们的这个想法他肯定想到了,为什么框架是现在的样子,有什么好处,怎么运用,这都是要在课堂中讲解的。

    对于零基础的同学,只需要能看懂我画的这个流程,知道MapReduce大概这个样子就行了,这就是这篇帖子的目的。不要去深究里面的细节,毕竟咱们都是零基础。

    来,同学们,告诉我,能看明白吗?如果不明白,请跟帖,我会一一解答!


点评

顶  发表于 2013-4-29 08:26

23 个回复

倒序浏览
顶下           老师这么晚还在
回复 使用道具 举报
张文彬 发表于 2013-4-29 00:32
顶下           老师这么晚还在

这一周一直在想如何写一篇关于MapReduce核心的适合零基础同学的帖子,今天突然灵感来了,呵呵
回复 使用道具 举报
好吧,露个脸,潜水太久~~
回复 使用道具 举报
本帖最后由 曹睿翔 于 2013-4-29 01:25 编辑

基本明白,不深究,占个楼说说我的理解

输入数据
------>实现对传入数据一次封装,并输出(覆盖一个方法来实现)
------->shuffle负责整理数据并输出(过程一定很有意思、分布式我喜欢,归并从字面上还算好理解点)
----->把shuffle输出的结果再包装
----->输出

Mapper应该是对输入的列表元素进行迭代,写代码去处理元素(不知道是不是加标记、分类好方便下一步shuffle进行整理)
reduce不太理解怎么处理  shuffle 传出的 list(v2)

其实我还想问的是,hadoop处理的一般是什么信息?对信息有没有分类然后用相应的处理方式?非关系型数据库有什么东西能替代关系型数据库中映射,高效处理数据之间的关系?问的问题太宽泛了,我有空百度吧,老师教教怎么搜就行啦

吴老师辛苦了,这么晚还在普及知识
回复 使用道具 举报
老师幸苦了{:soso_e129:}
回复 使用道具 举报
老师太敬业了。希望能在云丝看到您啊。
回复 使用道具 举报
wuddd 高级黑马 2013-4-29 05:30:18
8#
曹睿翔 发表于 2013-4-29 01:02
基本明白,不深究,占个楼说说我的理解

输入数据

对过程、mapper、reducer的理解基本都是到位的,非常棒!!!

hadoop适合处理大量的历史数据,就是不会再次修改的数据。它本质上是一种数据处理的算法,RDBMS也在借鉴类似的做法,hadoop也在借鉴RDBMS中的特点,二者以后走的会越来越近。

你说的“分类”,我没怎么理解,不敢妄下定论。hadoop中的常见算法,包括单词计数、去重、表连接等。

入学前建议学习javaSE的东西,这是贯穿整个职业生涯的东西。hadoop只是后期的一个框架,javaSE基础夯实了,hadoop学习起来很快!
回复 使用道具 举报
wuddd 高级黑马 2013-4-29 05:43:09
9#
HM刘俊 发表于 2013-4-29 01:53
老师太敬业了。希望能在云丝看到您啊。

快2点了,还没有休息,比我敬业。咱们都要注意身体啊!程序员可以多玩玩羽毛球,对颈椎有好处
回复 使用道具 举报
吴超老师 发表于 2013-4-29 05:43
快2点了,还没有休息,比我敬业。咱们都要注意身体啊!程序员可以多玩玩羽毛球,对颈椎有好处 ...

为什么要写map、reduce两个方法???
留了个坑啊。
回复 使用道具 举报
wuddd 高级黑马 2013-4-29 07:05:40
11#
刘文飞 发表于 2013-4-29 06:12
为什么要写map、reduce两个方法???
留了个坑啊。

关于map、reduce方法的普适性含义,可以看http://bbs.itheima.com/thread-44280-1-1.html。关于在hadoop中是什么含义,就是本帖的目的。“为什么写、如何写”要讲明白的话,需要先讲hadoop框架,讲到底层的api等,对新人普及知识而言是不合适的。

MapReduce我是计划讲2天时间,约12个小时。这个坑只能留着,论坛中肯定是填不平的。如果你深入研究过,咱们可以单独沟通,比如电话、邮件,在帖子中还是不谈细节吧。
回复 使用道具 举报
老师要注意休息啊,喜欢这样的帖子,虽然我不是报的云,但是对hadoop比较感兴趣。以后有机会一定好后学习学习。
老师辛苦了
回复 使用道具 举报
基本明白:
咱们做的就是去覆盖第二阶段mapper和和第四阶段的ruducer的函数,这两个函数的接受值分别是k1,v1  k2,list(v2); 输出值分别为k2,v2  k3,v3.
回复 使用道具 举报
吴超老师 发表于 2013-4-29 05:43
快2点了,还没有休息,比我敬业。咱们都要注意身体啊!程序员可以多玩玩羽毛球,对颈椎有好处 ...

谢谢老师的建议。是啊,身体是革命的本钱,呵呵。
回复 使用道具 举报
wuddd 高级黑马 2013-4-29 17:01:24
15#
张超 发表于 2013-4-29 08:51
基本明白:
咱们做的就是去覆盖第二阶段mapper和和第四阶段的ruducer的函数,这两个函数的接受值分别是k1,v ...

完全正确
回复 使用道具 举报
可否这样理解:
你给我数据,我帮你进行相应的处理,得到的是你想要的数据,至于我怎么做的,你不比清楚;对数据的处理分为两个方面
一个是程序员做的:也就是mapper和reduce方法的覆盖,还有一部分是框架内部进行处理的,就好比是struts2的表单封装一样;
疑问:分布式?我只知道点对点,或者说对等,每一台电脑即是客户机也是服务器。。。但是分布式是个什么概念就不晓得了。。。
回复 使用道具 举报
追问;hadoop是在linux下开发,那这个linux是ubuntu还是red hat;
有没有什么特定的限制。或者说您用的是哪一种系统写hadoop。。。。
回复 使用道具 举报
wuddd 高级黑马 2013-4-29 20:13:55
18#
Miss小强 发表于 2013-4-29 18:19
追问;hadoop是在linux下开发,那这个linux是ubuntu还是red hat;
有没有什么特定的限制。或者说您用的是哪 ...

都可以。教学用red hat
回复 使用道具 举报
wuddd 高级黑马 2013-4-29 20:15:01
19#
Miss小强 发表于 2013-4-29 18:16
可否这样理解:
你给我数据,我帮你进行相应的处理,得到的是你想要的数据,至于我怎么做的,你不比清楚; ...

理解完全正确!

对等也是分布式啊
回复 使用道具 举报
吴超老师 发表于 2013-4-29 20:15
理解完全正确!

对等也是分布式啊

好吧,我先把SSH,和linux学好来再说,到时候就跟着您混了,希望在云四的教室碰到您。。。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马