在研究hadoop之前,有必要将hadoop两个核心技术HDFS和MapReduce了解一下,做好的资料当然就是google的两篇论文了。现将Hadoop中MapReduce的执行流程总结如下:
用户提交的称为Job,每个Job会被切分成很多数据集,每个数据集作为Map的输入,称为一个task。
InputFormat将输入的数据集切割成小数据集 InputSplits, 每一个 InputSplit 将由一个 Mapper 负责处理。此外 InputFormat 中还提供一个 RecordReader 的实现, RecordReader 将一个 InputSplit 解析成 <key,value> 对,有了<k,v>,就可以开始做map操作了。
Map后会产生很多中间结果,先对这些结果按照key值排序,这时可以利用用户提供的combiner函数将中间结果进行一次合并。之后这些中间结果会被分区函数分为R个区域,分区函数可以是类似于hash(key) mod R这样处理,这样会将具有相同key值的数据聚集到一起。在reduce之前会有一个merge操作,将具有相同key值的value合并成一个list,形成<key, list<value> >的形式,这就是这个过程就是混洗(Shuffle)和排序(sort)的过程。
上面通过Shuffle和sort后得到的<key, (list<value>)>会送到Reducer. reduce方法中处理,输出的结果通过OutputFormat,输出到DFS中。
用户提交的称为Job,每个Job会被切分成很多数据集,每个数据集作为Map的输入,称为一个task。
InputFormat将输入的数据集切割成小数据集 InputSplits, 每一个 InputSplit 将由一个 Mapper 负责处理。此外 InputFormat 中还提供一个 RecordReader 的实现, RecordReader 将一个 InputSplit 解析成 <key,value> 对,有了<k,v>,就可以开始做map操作了。
Map后会产生很多中间结果,先对这些结果按照key值排序,这时可以利用用户提供的combiner函数将中间结果进行一次合并。之后这些中间结果会被分区函数分为R个区域,分区函数可以是类似于hash(key) mod R这样处理,这样会将具有相同key值的数据聚集到一起。在reduce之前会有一个merge操作,将具有相同key值的value合并成一个list,形成<key, list<value> >的形式,这就是这个过程就是混洗(Shuffle)和排序(sort)的过程。
上面通过Shuffle和sort后得到的<key, (list<value>)>会送到Reducer. reduce方法中处理,输出的结果通过OutputFormat,输出到DFS中。