Hadoop MR 核心原理
WordCount运行设计
WordCount的Map/Reduce主要分为如下几个阶段:
- Mapper主要负责任务的初级处理, Reducer主要负责数据的合并;
- Mapper端的操作为(读取数据/按行处理/每行按空格切分单词/数据存入HashMap/将HashMap按照范围切分/HashMap
数据传递给下游, 即Reducer端) - Reducer端的操作为(累加操作/输出操作)
- NodeManager处理如下操作: MapTask分配 / ReduceTask分配 /
- MapTask 与ReduceTask的串链(包括数据的切分) / MapTask& ReduceTask失败机制
Job提交过程(WordCount为例子)
Job的提交流程如上所示:
- Client端首先根据数据, 对文件进行切分(切分后即知道需要几个MapTask进行处理), 切分后提交给Yarn,即ResourceManager. 提交给Yarn时, 主要包括job.split/a.jar/job.xml三个文件.
- Yarn首先会启动一个MR Process运行这个程序, 即运行Jar包.
- MR Process通过job.split等得知需要启动几个MapTask, 启动MapTask执行Map的操作.
- MapTask通过InputFormat去既定的资源中读取数据, 分别执行map()操作,
- 随后将自己处理后的数据放入context.(context.write(xx,xx)😉 随后通过OutputCollect及ReduceTask的相关信息, 将处理过的数据传递给ReduceTask.
- ReduceTask得到数据后, 通过map()进行遍历处理. 处理结束后, 通过OutputFormat将数据存放在约定位置.
注意: 值得一提的是ReduceTask和MapTask在运行map()方法前都会通过setup()方法进行初始化操作. 运行map()方法后, 会通过cleanup()方法进行处理操作. 其中map()方法可能执行多次, 而初始化和结束方法都只执行一次.