MapReduce是处理/产生海量数据集的编程模型。,通过map()函数处理key-value对,产生中间key-value对,使用reduce()函数合并相同key的中间key/value中的value。
大数据量处理中的几种情况可使用MapReduece来解决:
(1)URL访问频率统计,map函数处理请求和应答(URL,1)的log,reduce函数把具有相同URL的值合并,输出格式为成对的(URL,总个数);
(2)逆向Web-Link图:map函数输出所有包含指向目标URL的网页,用(目标URL,源URL)这样的结构对输出。reduce函数聚合所有关联相同目标URL的列表、源URL列表,输出格式为(目标URL,list(源URL))。
(3)逆序索引,和(2)中相似,map函数分析文档,产生(word,document)序列组,reduce函数处理指定word的所有序列组,并且对相关documentID进行排序,输出一个(word,list(document))组。
mapreduce函数包括一个[color=red]主控程序master和作业程序worker[/color]。(1)首先把输入分成M块,(16M-64M),master把M个map任务和R个reduce任务分配给worker。
(2)worker读取map任务处理输入,分析出key/value对,传递给用户定义的reduce函数,map产生的中间结果暂存到内存。
(3)map函数缓冲到内存的结果被定时刷写到本地硬盘上,通过分区函数,写入R个区中。中间结果存储的硬盘位置发送回master,master把位置信息传送给reduce函数的worker。
(4)执行reduce函数的worker得到中间ley/value对的位置时,worker调用远程方法读取中间数据,当reduce函数的worker读取了所有中间数据,就是用中间数据的key进行排序,[color=red]如果中间结果集太大,则是用外排序的方法[/color]。
(5)reduce函数的worker遍历根据中间结果集的key遍历排序后的数据,把key和相关中间结果value集合传递给reduce函数。reduce函数最后把输出结果存放在master机器的一个输出文件中。
(6)map任务和reduce任务执行完毕,master激活用户程序。
(7)以上过程执行完后,mapreduce的执行数据存放在R个输出文件中。
mapreduce的容错
master定期发送命令轮询每一台worker机器,如果一定时间内worker机器没有响应,则master认为该worker失效。将这台worker完成的map任务全部设置成初始空闲状态,被其它worker调度执行。该机器正在处理的map和reduce任务设置成空闲状态,让其它worker重新执行。
[color=red]失效机器上的map任务需要重新执行[/color]。因为中间结果存储在访问失效的这台机器上,导致中间结果不能访问。已经完成的reduce任务不用重新执行,因为结果保存在全局文件系统中。
如果map任务开始由A执行,后失效后由B执行,则所有执行reduce任务的worker都会接到通知,所有需要但是还没来得及从A上读数据的worker都会从B上读取数据。
在master中,会定期设定checkpoint,如果master任务失败,则从上次最后一个检查点开始启动另一个master进程。
map和reduce任务的可靠性由输出[quote]进行原子提交完[/quote]成的,每个正在进行的任务把结果写到一个私有的临时文件中,全部写完后,进行提交,把临时文件变成永久保存的文件。
大数据量处理中的几种情况可使用MapReduece来解决:
(1)URL访问频率统计,map函数处理请求和应答(URL,1)的log,reduce函数把具有相同URL的值合并,输出格式为成对的(URL,总个数);
(2)逆向Web-Link图:map函数输出所有包含指向目标URL的网页,用(目标URL,源URL)这样的结构对输出。reduce函数聚合所有关联相同目标URL的列表、源URL列表,输出格式为(目标URL,list(源URL))。
(3)逆序索引,和(2)中相似,map函数分析文档,产生(word,document)序列组,reduce函数处理指定word的所有序列组,并且对相关documentID进行排序,输出一个(word,list(document))组。
mapreduce函数包括一个[color=red]主控程序master和作业程序worker[/color]。(1)首先把输入分成M块,(16M-64M),master把M个map任务和R个reduce任务分配给worker。
(2)worker读取map任务处理输入,分析出key/value对,传递给用户定义的reduce函数,map产生的中间结果暂存到内存。
(3)map函数缓冲到内存的结果被定时刷写到本地硬盘上,通过分区函数,写入R个区中。中间结果存储的硬盘位置发送回master,master把位置信息传送给reduce函数的worker。
(4)执行reduce函数的worker得到中间ley/value对的位置时,worker调用远程方法读取中间数据,当reduce函数的worker读取了所有中间数据,就是用中间数据的key进行排序,[color=red]如果中间结果集太大,则是用外排序的方法[/color]。
(5)reduce函数的worker遍历根据中间结果集的key遍历排序后的数据,把key和相关中间结果value集合传递给reduce函数。reduce函数最后把输出结果存放在master机器的一个输出文件中。
(6)map任务和reduce任务执行完毕,master激活用户程序。
(7)以上过程执行完后,mapreduce的执行数据存放在R个输出文件中。
mapreduce的容错
master定期发送命令轮询每一台worker机器,如果一定时间内worker机器没有响应,则master认为该worker失效。将这台worker完成的map任务全部设置成初始空闲状态,被其它worker调度执行。该机器正在处理的map和reduce任务设置成空闲状态,让其它worker重新执行。
[color=red]失效机器上的map任务需要重新执行[/color]。因为中间结果存储在访问失效的这台机器上,导致中间结果不能访问。已经完成的reduce任务不用重新执行,因为结果保存在全局文件系统中。
如果map任务开始由A执行,后失效后由B执行,则所有执行reduce任务的worker都会接到通知,所有需要但是还没来得及从A上读数据的worker都会从B上读取数据。
在master中,会定期设定checkpoint,如果master任务失败,则从上次最后一个检查点开始启动另一个master进程。
map和reduce任务的可靠性由输出[quote]进行原子提交完[/quote]成的,每个正在进行的任务把结果写到一个私有的临时文件中,全部写完后,进行提交,把临时文件变成永久保存的文件。