暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MR的工作原理和数据本地化过程

BigData社区 2019-06-28
842

这一节谈谈MapReduce的工作原理,也是作为MapReduce学习阶段的汇总,还有数据本地化的一个过程。


map端流程


map---->partition(blockingbuffer块缓冲区)--->sort(快速排序) --->combiner --->shuffle --->


Reduce端过程

Reducer ---->copy ->sort ->Reducer



MR全流程

IntputFormat-->redcordReader-->map-->

    partition-->sort-->combiner-->sopy-->sort-->reduce-->

    OutputFormat-->redcordWriter




数据本地化过程图解


300M数据,MR逻辑切割(数据本地化过程)

数据本地化最重要的是文件必须可切割



什么是数据本地化?


首先需要知道,hadoop数据本地化是指的map任务,reduce任务并不具备数据本地化特征。
      通常输入的数据首先将会分片split,每个分片上构建一个map任务,由该任务执行执行用户自定义的map函数,从而处理分片中的每条记录。
      那么切片的大小一般是趋向一个HDFS的block块的大小。为什么最佳的分片大小是趋向HDFS块的大小呢?是因为这样能够确保单节点上最大输入块的大小,如果分片跨越两个数据块,没有一个HDFS能够同时存储这两块数据,因此需要通过网络传输将部分数据传输到map任务节点上。这样明显比使用本地数据的map效率更低。
       注意,map任务执行后的结果并没有写到HDFS中,而是作为中间结果存储到本地硬盘,那为什么没有存储到HDFS呢?因为,该中间结果会被reduce处理后产生最终结果后,该中间数据会被删除,如果存储到HDFS中,他会进行备份,这样明显没有意义。如果map将中间结果传输到reduce过程中出现了错误,Hadoop会在另一个节点上重新执行map产生中间结果。
       那么为什么reduce没有数据本地化的特点呢?对于单个reduce任务来说,他的输入通常是所有mapper经过排序输出,这些输出通过网络传输到reduce节点,数据在reduce节点合并然后由reduce函数进行处理。最终结果输出到HDFS上。当多个有reduce任务的时候,map会针对输出进行分区partition,也就是为每个reduce构建一个分区,分区是由用户指定的partition函数,一般是默认的哈希函数进行分区,效率很高。

数据本地化好处:

1.防止数据倾斜

2.减少网络间传输




以上就是今天的所有内容啦。希望能在你学习的路上帮到你,要是觉得还不错请识别以下二维码关注或转发吧,感谢支持!

推荐阅读:

  1. MapReduce的shuffle过程详解

  2. MapReduce实现join的几种方法

  3. MapReduce的数据倾斜及解决方案

  4. Hadoop中partition深度解析

文章转载自BigData社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论