Mapreduce工作机制
一、MapReduce简介
MapReduce是一种并行编程模型,将计算阶段分为两个阶段:Map阶段和Reduce阶段。首先把输入数据源分块,交给多个Map任务去执行,Map任务执行Map函数,根据某种规则对数据分类,写入本地硬盘。然后进入Reduce阶段,该阶段由Reduce函数把Map阶段具有相同key值的中间结果收集到相同Reduce结点进行合并处理,并将结果写入本地磁盘。最终结果通过合并Reduce任务的输出得到。
二、文件切片
InputFormat 的主要功能就是确定每一个 map 任务需要读取哪些数据以及如何读取数据的问题,每一个 map 读取哪些数据由 InputSplit(数据切片)决定,如何读取数据由 RecordReader 来决定。InputFormat 中就有获取 InputSplit 和RecordReader 的方法。
默认输入格式为TextInputFormat,是FileInputFormat的实现类
- FileInputFormat继承InputFormat,getSplites()方法
先验证输入的文件路径是否存在,存在返回可工作的Datanode集合
将数据分成一个个Block块,系统默认物理分块大小为128M,实际分割时回进行判断是不是以回车符结尾,即判断最后的单词是否完整,不完整会读完这句话即到最近的一个回车符再进行分块,形成逻辑分块,逻辑分块最小是128M,会对剩余的文件大小进行判断,是否小于1.1倍的128M,如果在这范围之内,则不再进行切分,直接归为一个block块即一个切片。
同时,对数据进行切割时记录起始文件,以及结束位置,目的是在后期调用数据时保证