我是靠谱客的博主 单纯小鸭子,最近开发中收集的这篇文章主要介绍(统计单词数)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过程的理解,希望对大家有所帮助!,如有不正确的地方请多多指教!

最后

以上就是单纯小鸭子为你收集整理的(统计单词数)mapreduce函数理解的全部内容,希望文章能够帮你解决(统计单词数)mapreduce函数理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部