Mapreduce工作全流程
mapreduce工作三大核心问题
1.图示
- 读数据到底是怎么回事?
- shuffle到底是什么?
- 结果数据到底是怎么回事?
mapreduce的工作流程
1.读数据
1.1对文件切片产生的问题的解决
- 图示
-
理解:当文件进行切片时,有可能会把单词且分开比如:hello切分为he和llo
为了能够完整的,不出错的统计每一个单词的出现。有以下解决方案
-
解决思想:因为默认的读取操作是,默认读取文件的一行数据,读取器不会管你是不是在这一行切开了。根据这个特性来进行框架规定了解决方案。
-
解决方案(读取规则):
- 每个maptask都向下多读一行
- 每一个maptask都要抛弃读取的第一行数据
- 第一个maptask不需要抛弃第一行
- 最后一个maptask不往下多读一行
1.2图示
1.3读文件流程
- maptask调用TextInputFormat.
- TextInputFormat:指定去读什么文件,比如:去文本文档中,数据库等
- TextInputFormat调用createLineRecordReader方法后,会生成一个Reader(具体怎么去读)
- 生成了一个LineRecordReader对象,按行读
- nextkeyvalue
- getCurrentkey
- getCurrentvalue
- maptask调用nextkeyvalue方法