一种基于管道通信的MapReduce编程框架运算方法

文档序号:6336637阅读:307来源:国知局
专利名称:一种基于管道通信的MapReduce编程框架运算方法
技术领域
本发明涉及云计算领域,具体说是一种云计算环境下基于管道通信的MapReduce 编程框架运算方法。
背景技术
自从2007年IBM和Google联合推出云计算以来,云计算已经成为工业界和学术 界都关注的热点问题,云计算已成为分布式计算未来发展方向。由Google提出的MapReduce编程框架是云计算中的代表性技术,它适用于分布式 处理大规模数据集,程序员在Map函数中指定对各分块数据的处理过程,在Reduce函数中 指定如何对分块数据处理的中间结果进行规约。传统MapReduce编程框架存在如下问题(1)传统MapReduce编程框架将中间结 果保存到分布式文件系统(DFS,Distributed File System),每个文件在DFS上往往存在 多个拷贝,因此,保存中间结果的存储空间维护代价高、效率低;(2)在传统MapReduce编程 框架下,Map任务和Reduce任务串行执行,而且它们都需要从DFS上读取输入文件,这些因 素都延长了作业的执行时间。

发明内容
本发明的目的是提供一种基于管道通信的MapReduce编程框架,通过在Map任务 和Reduce任务之间添加通信管道,使Map任务和Reduce任务所产生的中间结果无需保存 到DFS,而直接通过管道进行数据交换。而且,Map任务和Reduce任务能同步交换数据,使 Map任务和Reduce任务能并行执行。本发明能节省DFS维护代价,大幅度缩短作业的执行 时间,且具备健壮的容错性。本发明的目的是通过以下技术方案来实现的
一种基于管道通信的MapReduce编程框架运算方法,其特征在于该运算方法利用 SOCKET编程在Map任务和Reduce任务之间实现管道通信,具体步骤如下
1)Map任务初始化时打开SOCKET与Reduce任务建立通信管道,Map任务开始执行后, 边执行边将输出的中间结果通过管道发给Reduce任务;Reduce任务同步接收来自于Map 任务的数据,将这些数据存储到内存缓冲区中,Reduce在收到的部分数据的情况下,一旦满 足其执行条件,Reduce基于部分输入数据开始执行;此时,Map任务尚未完成,Map任务和 Reduce任务并行化执行;
2)当所有Map任务都执行完毕时,Reduce任务合并来自于同一Map任务的数据,并 继续执行直至完毕;若Reduce任务产生的中间数据还需要被下一轮的Map任务所使用,则 Reduce任务将中间数据通过管道传送给Map任务;若Reduce任务产生的数据是最后结果, 则Reduce任务将结果写入DFS。本发明中的容错策略是=Reduce任务从管道接收到Map任务发来的数据时, Reduce任务将收到的数据暂时存储到临时缓冲区,当确认Map任务成功完成时,才将临时缓冲区的结果合并;当Reduce任务获知Map任务失败时,忽略该Map任务从管道发来的所 有数据;Map任务将其发出去的数据全部暂时保存,当Reduce任务失败时,将暂时保存的已 发送过的数据重新向复制的Reduce任务发送。本发明避免了传统的Map任务和Reduce任务将中间结果存储到DFS,从而降低 DFS维护代价,并减少从DFS读取数据的时间。Reduce任务能基于部分输入数据开始执行, 使得Map任务和Reduce任务并行化执行。相比于传统MapReduce编程框架,本发明既减少 从DFS读取数据的时间,又使得Map任务和Reduce任务并行化执行,从而大幅度地减少了 作业的执行时间。本发明还分别针对Map任务失败和Reduce任务失败提供了容错策略,使其具备了 健壮的容错性。


图1为传统MapReduce编程框架数据流的示意图; 图2本发明数据流的示意图3为本发明容错策略的流程图4为本发明与传统MapReduce编程框架Map和Reduce任务执行过程比较图。
具体实施例方式一种本发明所述的基于管道通信的MapReduce编程框架运算方法,本发明数据流 与传统MapReduce编程框架数据流存在较大区别,图1为传统MapReduce编程框架数据流 的示意图;图2本发明数据流的示意图。传统MapReduce编程框架中,Map任务和Reduce 任务将所有输出都写入DFS,也是从DFS异步读取输入数据。而本发明中,Map任务从DFS 同步读取输入数据,开始执行,将产生的数据同步传送给管道,Reduce任务从管道同步获 取数据,开始执行。若Reduce任务产生的中间数据还需要被下一轮的Map任务所使用,则 Reduce任务将中间数据通过管道传送给Map任务;若Reduce任务产生的数据是最后结果, 则Reduce任务将结果写入DFS。由于下一轮Map任务需要等到上一轮Reduce任务全部结
束后才具备执行条件,因此,Reduce传送给Map的数据时异步的。本发明的容错策略,如图3所示,包括如下步骤
步骤1. Map任务开始执行,产生中间数据,通过管道发送给Reduce任务; 步骤2. Reduce任务从管道获取数据,开始执行。在Map和Reduce任务并行执行过程 中,进行步骤3和4的判断;
步骤3.判断Map任务是否失败。若是,转到步骤5;否则,转到步骤6; 步骤4.判断Reduce任务是否失败。若是,转到步骤7 ;否则,转到步骤8 ; 步骤5. Map任务失败,Reduce任务丢弃来自该Map任务的所有数据,继续接收复制的 Map任务发来的数据;
步骤6. Map任务正常,并执行完毕。Reduce任务合并同一 Map任务的数据,并继续执 行,直至完成;
步骤7. Reduce任务失败,生成该任务的拷贝。Map任务将暂时保存的已发送过的数据 重新向复制的Reduce任务发送。转入步骤2 ;
4步骤8. Reduce任务正常,执行直至完成。云计算平台能对Map任务和Reduce任务进行监控,步骤3和步骤4的监测判断不 是一次,而是在Map和Reduce任务并行执行过程中的持续监测。图4是由实验得出的本发明和传统MapReduce编程框架Map和Reduce任务执行过 程的比较结果,实验基于MapReduce编程框架实现数据挖掘算法Apriori,实验设置80,000 条数据库记录,包含500项,8个Map任务结点。记录随着时间的推进,Map和Reduce任务 执行进度的变化,执行进度是区间W,l]内的值,表示已完成的任务占总任务量的百分比。 由实验结果可知
1、本发明实施方式所提出的基于管道通信MapReduce编程框架中,Reduce任务可以与 Map任务并行执行;而传统MapReduce则不可以;
2、基于管道通信MapReduce编程框架的执行时间远比传统MapReduce小,说明,本发明 实施方式能大幅度地降低作业执行时间;
3、另外,基于管道通信MapReduce编程框架不将所有的中间数据写入DFS,因而可节约 DFS的存储空间,减少DFS的维护代价。
权利要求
一种基于管道通信的MapReduce编程框架运算方法,其特征在于该运算方法利用SOCKET编程在Map任务和Reduce任务之间实现管道通信,具体步骤如下1)Map任务初始化时打开SOCKET与Reduce任务建立通信管道,Map任务开始执行后,边执行边将输出的中间结果通过管道发给Reduce任务;Reduce任务同步接收来自于Map任务的数据,将这些数据存储到内存缓冲区中,Reduce在收到的部分数据的情况下,一旦满足其执行条件,Reduce基于部分输入数据开始执行;此时,Map任务尚未完成,Map任务和Reduce任务并行化执行;2)当所有Map任务都执行完毕时,Reduce任务合并来自于同一Map任务的数据,并继续执行直至完毕;若Reduce任务产生的中间数据还需要被下一轮的Map任务所使用,则Reduce任务将中间数据通过管道传送给Map任务;若Reduce任务产生的数据是最后结果,则Reduce任务将结果写入DFS。
2.根据权利要求1所述的基于管道通信的MapReduce编程框架运算方法,其特征在 于Reduce任务从管道接收到Map任务发来的数据时,Reduce任务将收到的数据暂时存 储到临时缓冲区,当确认Map任务成功完成时,才将临时缓冲区的结果合并;当Reduce任务 获知Map任务失败时,忽略该Map任务从管道发来的所有数据;Map任务将其发出去的数据 全部暂时保存,当Reduce任务失败时,将暂时保存的已发送过的数据重新向复制的Reduce 任务发送。
全文摘要
本发明公开一种基于管道通信的MapReduce编程框架运算方法,该方法在Map任务和Reduce任务之间实现管道通信,避免将中间结果写入分布式文件系统,并使Map任务和Reduce任务并行化执行;该方法还提供了容错策略,Reduce任务将收到的数据存储到临时缓冲区,Map任务失败时,忽略它从管道发来的所有数据;Map任务将其发出去的数据暂时保存,Reduce任务失败时,将这些数据重新发送给复制的Reduce任务。本发明成果能节省布式文件系统的维护代价,大幅度缩短作业的执行时间,且具备健壮的容错性。
文档编号G06F9/46GK101996079SQ20101055651
公开日2011年3月30日 申请日期2010年11月24日 优先权日2010年11月24日
发明者伍之昂, 曹杰, 王有权 申请人:南京财经大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1