Map Reduce

2020-02-17  本文已影响0人  金泽祺

Map Reduce

Mapper接口

extends Mapper<LongWritable, Text, Text, IntWritable>
输入key类型,输入value类型,输出key类型,输出value类型

void map(LongWritable, Text, Context)
输入key类型,输入value类型

context.write(Text, IntWritable)
输出key类型,输出value类型

Reducer接口

extends Reducer<Text, IntWritable, Text, IntWritable>
输入key类型,输入value类型,输出key类型,输出value类型

void reduce(Text, Iterable<IntWritable>, Context)
输入key类型,输入value类型

context.write(Text, IntWritable)
输出key类型,输出value类型

MapReduce机制

角色:client, JobTracker, TaskTracker, HDFS

Client: 提交job到JobTracker
JobTracker: 分发任务给TaskTracker, 输入分片 Input Split
TaskTracker: 执行小任务,每个分片一个map任务
HDFS:存储数据

过程:

  1. 输入分片(Input Split):分片在在HDFS里
  2. map:输入分片split,输出到内存缓冲区
  3. shuffle: 排序,key相同的数据放在一起,分区 partitioner
  4. reduce: 一个分区partition对应一个reduce

shuffe阶段

  1. partition: 根据key把k-v放入某个partition。在内存缓冲区优化,决定数据交给哪个reducer处理,负载均衡
  2. spill: 每个partition里的k-v进行排序,并且执行combine。sort & combine,优化,通常跟reducer是一样的,写磁盘
  3. merge: 每个partition里的k-v写成group:k-list(?) 磁盘可能有多个溢写文件,需要merge成一个?merge成group: key, list?
  4. fetch: 从不同的map拉取中间结果
  5. merge: 合并来自不同map的输出文件

分片 split

分区 partition

归并排序

谢谢阅读!

上一篇 下一篇

猜你喜欢

热点阅读