Hadoop——MapReduce过程

MapReduce由Mapper和Reucer组成,Mapper负责处理每行数据,Reducer处理相同Key的一组数据。

 

MapReduce运行是由Driver中的job通过submit()进行作业提交,submit()包含与集群建立连接和提交作业的过程,在提交作业时会进行切片,默认的切片方法是使用的TextInputFormat,它进行切片时根据文件的大小进行切割,默认切割规则是否达到一个指定值的1.1倍,使用TextInputFormat读取多个文件时,不同文件不会进行合并处理,会从头开始进行切片。切片之后会把切片配置信息写到一个文件夹下,然后集群去执行这些切片配置,执行时会用到mapper和reducer

 

一、Mapper的运行过程大概包括以下几步,reader、mapper、collect、spill、combiner

reader

每个切片一般对应一个mapper,reader会根据切片配置信息去读取相应路径下的数据,

mapper

然后调用用户写的mapper方法对数据进行相应的处理,

collect

数据处理完之后调用OutputCollector.collect()输出结果,在函数内部会调用key/value分区(调用Driver中job指定的分区方法,默认为HashPartition分区),并将数据写入一个环形缓冲区。

spill

当环形缓冲区达到一定条件时,会把数据写到本地磁盘,在写入磁盘之前会进行一个排序、合并、压缩等操作。

在进行排序时,会先按照分区编号就行排序,然后每个分区内在按照key的compareTo进行排序,如果用户设置了combine,在写入直接回调用combiner方法进行聚集操作。map

combiner

当所有的数据处理完之后,MapTask会把所有的文件进行一次合并,确保最终只有一个数据文件生成,同时生成相应的索引文件。

 

二、Reducer过程

reducetask根据自己的分区号,去 各个maptask机器上取相应的分区的数据

reducetask将来自各个maptask的文件进行合并(归并排序),大文件合并之后,shuffle阶段就结束了。

reducetask根据Driver中setCombinerGroupingComparatorClass()中的compare方法来判断哪些是属于同一分组,用户调用编写的reduce()方法处理group。

 

你可能感兴趣的:(Hadoop)