java hadoop(三) hadoop mapreduce 编程流程(以单词统计为例)

8 篇文章 0 订阅
5 篇文章 0 订阅

一、首先是map层

1、首先我们的文件是存储在hdfs,hdfs存储文件是按block块进行存储的,每个块的大小默认是128M。

2、我们是用InputFormat下边的子类TextInputFormat进行文件按行读取成K1 V1 模式    

K1:这一行的起始点在文件中的偏移量

V1:读取到的内容

3、每个block都会启动一个MapTask进行处理,map的主要操作就是将读取的内容转换成 K2 V2 

二、进入Shuffle阶段,生成新的K2 V2

1、 对map阶段输出的k2和v2对进行分区  

      可以根据K2的长度、大小、尾号等等进行分区

2、 对不同分区的数据按照相同的Key排序

      可以根据自定义的规则对数据进行排序

3、(可选)对数据进行局部聚合, 降低数据的网络拷贝

      规约就是对相同K的数据的值存到一个集合中(或者相加)或者自定义处理,可以用来减少网络IO传输

4、对数据进行分组, 相同Key的Value放入一个集合中,得到K2和[V2]

      根据K进行分组
 

三、Reduce阶段

1、对map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。


2、对多个map任务的输出进行合并、排序。编写reduce方法,在此方法中将K2和[V2]进行处理,转换成新的key、value(K3和V3)输出,并把reduce的输出保存到文件中

这里有几个ReduceTask是根据我们的分区数量来的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值