1 MapReduce编程模型
MapReduce将作业的整个运行过程分为两个阶段:Map阶段和Reduce阶段
Map阶段由一定数量的Map Task组成
输入数据格式解析:InputFormat
输入数据处理:Mapper
数据分组:Partitioner
Reduce阶段由一定数量的Reduce Task组成
数据远程拷贝
数据按照key排序
数据处理:Reducer
数据输出格式:OutputFormat
2 MapReduce工作原理
如下图所示:
Map阶段
InputFormat(默认TextInputFormat)
Mapper
Combiner(local reducer)
Partitioner
Reduce阶段
Reducer
OutputFormat(默认TextOutputFormat)
InputFormat
1 数据文件分片(Input Split),按照固定块划分
2 处理跨行问题
3 将分片数据解析成key/value对
4 默认实现是TextInputFormat
TextInputFormat
Key是行在文件中的偏移量,value是行内容。若行被截断,则读取下一个block的前几个字符
Split与Block
Block: HDFS中最小的数据存储单位 默认是64MB
Spit:MapReduce中最小的计算单元,默认与Block一一对应
Split与Block是对应关系是任意的,可由用户控制
Combiner
Combiner可做看local reducer 合并相同的key对应的value通常与Reducer逻辑一样
好处:
减少Map Task输出数据量(磁盘IO)
减少Reduce-Map网络传输数据量(网络IO)
Partitioner
Partitioner决定了Map Task输出的每条数据交给哪个Reduce Task处理
默认实现:hash(key) mo