(统计单词数)mapreduce函数理解

一、隐藏的过程:

1、读取hdfs上的一个file文件

2、将块文件进行分片split(默认分片是hdfs的块大小,一个分片就是一个maptask)

3、读取split(分片)文件中的一行内容

4、将一行内容转换为key-value的形式(key:为偏移量(即多少行,我的理解),value:为一行的内容)

5、将key-value输入到自己的map函数中

二、进入自己写的map函数:

--自己的map函数作用是:

1、读入一个key-value的数据(每一次只能读取一行数据,循环读完分片中所有的行当前maptask结束)

2、对该行的内容进行处理加工(即对value中的内容进行处理)(例如拆分)

3、输出处理完一行内容生成的key(单词)和value(1)进行输出(进入shuffle中

三、进入到隐藏的过程的shuffle过程

shuffle过程是将所有的map函数的执行的结果(重点进行以下步骤:

1、将map执行的结果(所有的key-value值)内存缓存区

备注:map方法(写入)-->内存缓冲区(溢出)-->本地多个溢出磁盘文件(合并)-->大的溢出文件

备注:溢出和合并都会调用partitioner进行分区和排序(key)

2、将所有的结果放入到不同的分区中(key取余reduce个数=该分区的编号

备注:一个分区编号对应唯一的一个reduce的编号。

3、将同一个分区中的key进行统一的排序(字典排序)

4、将同一个分区中的key-value进行合并:([key1,value1,value2,value3)],是map文件分片的唯一

5、当所有的maptask完成处理后reduc会按照自己编号到拉取所有的map生成的对应的分区下的数据,对拿过来的文件进行合并排序,按照map-key进行唯一的处理合并成:([key1,value1,value2,value3,value4...)],是处理文件的唯一

shuffle过程完成进入到reduce 中

四、--自己的reduce函数:map传过来的(key1,value1)值经过shuffle处理后,输出的(key,value)值(每一次只读唯一的(map-key,values)),进行统一的处理。

输入为:([key1,value1,value2,value3,value4...)],是处理文件的唯一

key:map处理一行内容生成的数据(例如hello); value是在源文件中相同key组成之后,返回给我们的一个集合(例如该集合是[1,1,1,1])。

(比如说进行循环相加i++)

输出为:通过job类中的FileOutputFormat.setOutputPath(job, new Path("/result"))

写入到hdfs的文件中。

context.write(new Text(key),new LongWritable(count))

map函数:主要是读取文件并分片,指定输出的key和输出的value(一般情况下输出的map-key是需求最后的主键,而value是需要进行聚合的数据);

reduce函数:按照map指定的map-key对文件进行聚合处理(文件:读取的所有文件,且是经过map函数shuffle过程处理过后的文件)

以上全为本人对MR过程的理解,希望对大家有所帮助!,如有不正确的地方请多多指教!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值