其他分享
首页 > 其他分享> > MapReduce(一)DataFlow

MapReduce(一)DataFlow

作者:互联网

原文链接:
https://data-flair.training/blogs/how-hadoop-mapreduce-works/

1、什么是MapReduce?

MapReduce是Hadoop的数据处理层. 它作为一个框架被设计地能让用户轻松简单地处理位于HDFS上的大量的结构化或者非结构化数据. 它会利用由提交任务分割出来子任务或者task来并行地处理大量的数据。基于这种并行机制,集群的处理数据的速度和可靠性得到改善。在使用Hadoop过程中,我们只需要以某种方式提交我们的业务代码,后面的事情将都由引擎来完成。

2、MapReduce是如何工作的?

在Hadoop中,MapReduce会被分解成两个阶段:Map阶段和Reduce阶段。Map阶段是处理数据的第一个阶段,我们会将复杂的业务逻辑或者耗时的代码放在这个阶段。Reduce是第二个阶段,这个阶段我们做一些轻量级的操作,比如聚合或者求和。

3、MapReduce的数据流

3.1、Input Files

MapReduce所依赖的数据都来自输入文件中,这个文件一般都是存在HDFS中。这些文件的格式是任意的,比如基于行的日志或者二进制格式。

3.2、InputFormat

现在,InputFormat定义如何分割和读取输入文件,它选择了一些文件或者其他对象作为输入。InputFormat创建InputSplit。

3.3、InputSplits

它是由InputFormat创建的,是Mapper处理的数据的逻辑视图。一个map任务会为每一个split而创建,因此map任务的数量和InputSplit的数量相同。split会被分割成records,每个records都会被mapper处理。

3.4、RecordReader

它和InputSplit通信,然后将数据转换成适合mapper读取的key-value键值对。默认情况下,它会用TextInputFormat来将数据转换为key-value对,RecordReader会和InputSplit持续通信直到文件读取结束。
It assigns byte offset (unique number) to each line present in the file(没读懂). 接着, 这些key-value键值对会发送给mapper做后续处理。

3.5、Mapper

它处理每一个输入的record(来自RecordReader)然后生成一个新的key-value对,这个新的key-value对和输入的键值对完全不同。Mapper的输出会被写入本地磁盘上,它被称为中间输出。Mapper的输出不会存储在HDFS上,因为这些都是临时数据,而且写到HDFS上还会生成没有比如的副本(另外HDFS是高延迟系统)。Mapper的输出会传递给combiner处理。

3.6、Combiner

Combiner也被称为“mini-reducer”。Combiner对mapper的输出执行本地的聚合,这有助于降低mapper和reducer之间的数据传输量。一旦combiner的功能被执行,它的输出会被传递给partitioner。

3.7、Partitioner

Partitioning allows even distribution of the map output over the reducer.

当我们的解决方案中需要多个reducer时,Partitioner就会派上用场。Partitioner接收combiners的输出,然后执行分区。Partitioning of output takes place on the basis of the key and then sorted. 依靠hash函数,键(或者部分键)会被用来指派分区。

根据MapReduce中的键值,每一个combiner输出会被分区,相同的键的记录会被分配到相同的分区中,然后每个分区的数据会发送到一个reducer。分区能让mapper的输入均匀地分布到reduce中。

3.8、Shuffling and Sorting

现在,输出已经被shuffle到reduce节点(运行reduce阶段的任务slave节点被称为reduce节点)。Shuffling是一个实质的基于网络的数据移动。一旦所有的mapper都结束了,且他们的输出都被shuffle到了reduce节点,接着的就是合并与排序这些中间数据数据,然后作为reduce阶段的输入。

3.9、Reducer

它用由mapper生成key-value对的集合作为输入,并且运行reducer函数处理每一个键值对然后生成输出。reducer的输出是最后的输出,它会被存储于HDFS。

标签:mapper,HDFS,输出,DataFlow,reducer,MapReduce,key
来源: https://www.cnblogs.com/ralgo/p/14885760.html