MapReduce的流程

目录

一、map前的操作 

1. 将要处理的数据进行分片操作 

2.为每一个分片分配一个MapTask任务

二、Mapper

三、shuffle过程

1.排序sort

2.分区partitioner

3.combiner  (非必须)

4.分组GroupingComparator

四、Reducer


 

一、map前的操作 

这一大步由MapReduce框架自动完成

1. 将要处理的数据进行分片操作 

  • 按照一个特定的切片大小,将待处理数据分为逻辑上的多个split

注意:是针对每一个文件进行切片,不同文件不放在一起进行分片操作

  • Q1:如何实现切片操作

       由 FileInputFormat 实现类的 getSplits() 方法完成的    

       该方法返回的是 List<InputSplit>,返回一组 InputSplit            

       InputSplit 封装了每一个逻辑切片的信息,包括长度和位置信息

  • Q2:如何确定切片大小呢

           FileInputFormat中默认的切片机制(用户无额外操作时,默认这样切片)

                 (1)简单地按照文件的内容长度进行切片

            (2)切片大小默认等于 block 大小 【128M】

            (3)切片时不考虑数据集整体,而是逐个针对每一个文件单独切片 

注意:若文件大小小于128M,则将这一个文件作为一个切片

2.为每一个分片分配一个MapTask任务

       每一个MapTask在接收到FileSplit之后按行读取

       将每一行转换为map端的输入数据类型:<一行文本的起始偏移量,一行文本的内容>

                    -------<LongWritable Text>

(字节偏移量:下一行记录开始位置=上一行记录的开始位置+上一行字符串内容的长度)

二、Mapper

map()方法:编写满足程序需求的代码

三、shuffle过程

发生在map阶段后,reduce阶段前

1.排序sort

   ①默认排序

   默认按照key进行字典排序

    ②自定义排序

2.分区partitioner

    ① 默认分区

 按照key的hashcode值%reducetask的个数 进行分区

    ② 自定义分区

3.combiner  (非必须)

    在mapper对输出结果进行一次合并

4.分组GroupingComparator

   ① 默认分组

        相同的key进行分组

   ② 自定义分组

四、Reducer

reduce()方法:编写满足程序需求的代码

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值