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

一、隐藏的过程:

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

2、将块文件进行分片split

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

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

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

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

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

1、读入一个key-value的数据(每一次只能读取一行数据)

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

3、最后以(key,value)的形式进行输出到reduce函数中。(先进入shuffle中

扫描二维码关注公众号,回复: 5662863 查看本文章

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

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

1、将map执行的结果(所有的key-value值)放入到hdfs中的临时文件中(MOF文件)

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

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

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

4、将同一个分区中的key-value进行合并(合并成(key),(value1,value2,value3))

shuffle过程完成进入到reduce 中

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

输入为:map传过来的(key,value)值经过shuffle处理后,输出的(key,value)值

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))

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

猜你喜欢

转载自blog.csdn.net/qq_42197986/article/details/88649188