首先什么是mapreduce:

总的来说,Mapreduce是一个分布式的运算编程框架,核心功能是将用户编写的核心逻辑代码分布式地运行在一个集群的很多服务器上。

为什么要mapreduce

(1)海量数据(我假设1000t,或者p级别)在单机上处理因为硬件资源限制,无法胜任,因为需要采用分布式集群的方式来处理。
(2)而一旦将单机版程序扩展到集群来分布式运行,将极大地增加程序的复杂度和开发难度
(3)引入mapreduce框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将分布式计算中的复杂性交由框架来处理

Mapreduce框架运行机制

大数据学习第二课之五mapreduce原理简介
如图所示:mapreduce就是分成两个步骤来进行的,第一步就是分发,结果在进行汇总。第二次就是对第一步的结果进行统计,进行逻辑运算,载输出的过程。以图示为例,假设现在又一个文件,叫你统计它的单词量。黑椭圆为一个jar程序,进行第一步操作,首先就是把文本数据和jar包的业务逻辑代码分发,分发到很多台机器上,这里就展示三个,分别进行统计。然后输出他的结果。红椭圆里面的jar程序再对第一步的各个机器的结果进行统计,进行第二个的操作的结果进行输出。
接下来读者会产生几个问题:
过程中也有几个不足,就是蓝色(假设其中一台)的挂点怎么办,结果就会统计不全。
再着就是数据分发数量很多机器放很多。怎么办。
中间数据的缓存和调度问题,也是一个值得思考的问题。
任务其中一个失败,监控不到怎么办。
大致第一步可以对mapreduce先了解到这里(面深入会理解)。

Mapreduce框架运行动作具体机制

大数据学习第二课之五mapreduce原理简介
如图所示:第一步是很多个map进行操作,都是有一个map task任务调度去开始时读取文件,然后再对jar包(即写的逻辑代码),去执行想要的逻辑结果,返回数据,作为第三步,然后就是把各个结果存储在缓存之中。然后进行reduce操作,第一步先是从缓存中进行数据的读取(与map不同)。这些个都是由reduce task 这个任务进程在调度,然后去调用jar程序,执行输出结果。,在默认写到hdfs文件中。

mapreduce的数据操作过程(假设现在统计文本的单词图二为图一进行简单补充):

大数据学习第二课之五mapreduce原理简介
大数据学习第二课之五mapreduce原理简介
mapreduce操作基本已经上面说过了,那么接下来就是它是怎么对这些数据进行具体怎么操作的。
看图可知,map 和reduce的逻辑代码阶段传递和输出的参数以及结果都是由键值对<key,value>进行操作,保证数据规范性。中间有个shuffle操作,就是对第一步的map结果进行洗牌,对相同的结果进行统计,比如现在就是有<hello,1><tom,1>等,他会把<hello,1>进行统计在一起,把<tom,1>进行统计在一起,还有其他统计等。然后发给特定的reduce去执行,这样一个reduce就执行一种<hello,1>类似的统计,多个reduce多个(如<tom,1><kim,1>等)统计进行结果的统计,形成最终的结果,例如:<hello,5><tom.2><kim,52>,最后写入hdfs文件中进行展示。

所以产生mapreduce 编程规范:

(1)用户程序会分成三个部分:Mapper,Reducer,Driver
(2)Mapper的输入数据是KV对的形式,KV的类型可以设置
(3)Mapper的输出数据是KV对的形式,KV的类型可以设置
(4)Mapper中的业务逻辑写在map方法中
(5)map方法是每进来一个KV对调用一次
(6)Reducer的输入数据应该对应Mapper的输出数据,也是KV
(7)Reducer的业务逻辑写在reduce方法中
(8)reduce方法是对每一个<key,valueList>调用一次
(9)用户的Mapper和Reducer都要继承各自的父类
(10)整个程序需要一个Drvier来进行提交,提交的是一个描述了各种必要信息的 job对象
好了,就介绍到这里,下一课以代码展示这一原理会更加的清晰这些原理流程。

相关文章: