一、隐藏的过程:
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中)
三、进入到隐藏的过程的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过程的理解,希望对大家有所帮助!,如有不正确的地方请多多指教!