Hadoop学习(8)----MapReduce讲解

1 Hadoop的两个核心组件:HDFS和MapReduce,HDFS负责大数据的分布式存储,而MapReduce则是对大数据的分布式处理框架,能够并行的进行大数据文件处理,从而提高处理效率。该篇博客就是对MapReduce进行讲解。

2 MapReduce讲解

MapReduce是Hadoop框架的核心处理框架,分为map和reduce两个模块,将文件读取,map将文件分解成相应的键值对(key、value),reduce进行相应的计算,通过分布式并行处理提高处理的效率。下面我们就详细解释一下MapReduce框架的处理过程。

从这张图我们可以看出MapReduce框架中的WordCount函数。WordCount函数功能为读取整个文件中每个单词出现的次数。读取文件,然后通过split(分片)将读到的文件分成多个split,split作为map端的输入,在map中,split的每个单词作为key,value为该次出现的次数(1),map将读取到的结果输出,shuffle以map的输出为输入,对所有的数据进行重排,将key相同的键值对放入放到同一块区域,最后最后送入到reduce阶段中,reduce阶段则是对key/value键值对的处理,reduce处理完成后,所有的reduce将结果输出到同一个文件中,形成最终的结果。


这是一张关于这个MapReduce阶段任务的详细解析图,下面我们详细介绍一下MapReduce的每个阶段

(1)Input Split(输入分片)

在JobClient提交任务以后,JobClient会得到文件的所有的Block信息和块所在节点的信息,然后JobClient就会进行分片的计算。split和Block之间有紧密的联系,因为分片并不存放真正的数据,而是存放着分片长度和文件位置。默认情况下,Split的大小为64M,和Block的相同,也就是说在默认情况下,一个Block就会生成一个Split,而一个Split对应着一个map任务。例如一个文件如果是65M,会被分成一个64M的Block和一个1M的块,这两个块会生成两个Split进行输入,产生两个map进行计算。

(2)Map阶段

当完成分片(Split)后,split会被送入到相应的Map阶段,在送入的时候,split读到的文件或被切割成<key,value>键值对的方式输入到map中,在TextInputFormat中,生成的键值对中key是该行距离文件开始位置的偏移量,而value为该行的内容。大概键值对进入到map函数中,进行处理的过程就是重写的map函数。

(3)shuffle(混排)

该阶段是MapReduce的最重要的部分,因为在这个阶段实现了相同key值的规定和想不通reduce的输入。shuffle的输入时map的输出,shuffle得到map的输出后,进行pairition操作,parition的用作就是将相同Key的key/value对输入到相同reduce中,而parition的结果将会被存入到一个内存缓冲区中,这个内存缓冲区默认大小是100M,并且缓冲系数为0.8,当缓冲区的存储量达到80M时,该缓冲区就会唤醒溢写进程,将80M的文件写入到本地文件中。但是在写入写入本地文件的时候,最终会形成多个溢写文件,shuffle会将这些溢写文件进行合并(merge操作),在此过程中会进行Combine操作。Combine操作Map端的输出进行本地化的reduce操作,将多条内容归并为一条内容,从提高文件传输效率,提高处理速度,但是Combine函数试讲多个key/value键值对合并为1个key/value键值对,因此只能对最大值、最小值、求个数等进行操作,如果对平均数进行操作就会出现错误。当完成上述操作后就会生成相应的本地文件。

(4)reduce阶段

reduce会通过http协议将多个map形成的本地文件通过网络取回到本地,然后然后读取这些本地文件,因为在merge过程中已经将key/value键值对生成<key,{value,value2,...,valuen}>这样的集合模式。当reduce将这样的输入读入后,对value的集合进行reduce操作,这个操作是我们在reduce函数中定义好的。等所有的reduce完成后,将结束输入到输出目录中,最后形成结果。


3 总结

MapReduce框架是整个Hadoop框架的核心,以map-reduce处理框架实现了大数据的分布式处理,从而提高输出处理的效率,但是现阶段MapReduce框架仍然存在一定的缺陷:

(1)map阶段后为实现文件的安全存储,将内存中的文件全部溢写到本地会,在这个过程中浪费了大量的时间、硬盘等资源

(2)reduce阶段需要从多个map节点取回数据,通过http协议使得大量数据的传输变得笨重,浪费了大量的时间进行传送,使得MapReduce处理的效率降低。

(3)有的Block过小,使得MapReduce的启动时间远超过输出处理时间


参考博客:

http://www.cnblogs.com/sharpxiajun/p/3151395.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值