1、 在hadoop中,每个MapReduce任务都被初始化为一个Job。每个Job又可以分成两个阶段:map阶段和reduce阶段;map函数接受一个<key,value>形式的输入,然后同样产生一个<key,value>形式的中间输出,Hadoop会负责将所有具有相同结果中间key值的value集合到一起传给reduce函数,reduce函数接受一个如<key,(list of value)>形式的输入,然后对这个value集合进行处理,每个reduce产生0或1个输出,reduce的输出也是<key,value>形式。
2、map-reduce处理流程:
场景一:每个map对应一个输出,多个map对应有多个输出; map输出作为reduce的输入,reduce进行合并排序,输出最终结果。
场景二:MapReduce再执行过程中往往不止一个reduce task,reduce task的数量是可以通过程序制定的,当存在多个reduce task时,每个reduce会收集一个或多个key值。需要注意的是,当出现多个reduce task时,每个reduce task都会生成一个输出文件。
场景三:另外,没有reduce task的时候,系统会直接将map的输出作为输出结果作为最终结果,同时map task的数量可以看做是reduce task的数量,即:有多少个map task 就有多少个输出文件。
3、combine函数: 在mapreduce中使用combine函数很简单,只需再程序中添加如下内容:job.setCombinerClass(combine.class);可以制定reduce函数为combine函数,因为reduce函数有合并功能。