一种用于大数据处理的计算系统及计算方法

文档序号:6514033阅读:204来源:国知局
一种用于大数据处理的计算系统及计算方法
【专利摘要】本发明涉及一种用于大数据处理的计算系统及方法,所述系统从下至上依次包括最底层模块、中间层模块和最高层模块,且中间层模块又包括消息传输模块和计算模型模块;最底层模块采用Hadoop分布式文件系统,用于存储数据;消息传输模块用于实现在不同计算节点运行的计算模型模块之间传递消息;在不同计算节点运行的计算模型模块根据所述消息传输模块传递的消息实现协同工作,并各自构建特定类型的计算模型来处理数据;最高层模块用于为计算模型提供编程接口,并以串行的方式组合不同计算模型表达的计算,同时设置不同计算模型之间基于内存流水线方式共享数据。本发明允许在一个系统内采用多种计算模型编写应用程序,能解决更复杂的问题。
【专利说明】一种用于大数据处理的计算系统及计算方法
【技术领域】
[0001]本发明涉及大数处理领域,特别是涉及一种基于混合编程的计算系统及计算方法。
【背景技术】
[0002]近年来,随着社会信息化的快速发展,无论在科学研究、工业生产、商业和互联网领域,数据都呈现出爆炸式增长。目前,很多应用中的数据已从TB (太字节)级迅速发展到PB (拍字节)级甚至更高的数量级。面向大数据处理的计算框架已经成为热点话题。目前,开源的Hadoop系统已经在产业界获得了广泛应用。尽管Hadoop提供的MapReduce模型简单易用,但其计算模型具有局限性,表达能力有限,在解决诸如迭代计算、图分析等复杂问题时,很难将算法映射到MapReduce模型中,开发的工作量大,且运行的效率低下。目前,已经出现了多种多样的计算框架,例如,Dryad、Piccolo、Pregel和Spark等,这些计算框架极大地丰富了大数据处理的手段。但这些计算框架是面向特定问题领域,在其适用领域内可高效快速的解决问题。例如,Pregel针对大规模的图计算,在解决诸如web链接分析、疾病蔓延路径和优化交通路线等应用中具有明显的优势。目前的大数据处理任务日益多元化,不存在一种“万能”的框架适用于所有的应用场景,融合多种计算框架的数据处理平台成为大势所趋。在这种“统一”的数据处理平台下,大数据处理的手段会越来越丰富,解决问题会越来越容易,处理效率也会越来越高。目前的解决方法是在集群上通过资源管理系统来容纳多种计算框架,典型的系统包括Mesos和YARN等。这类系统能够允许多种计算框架共享同一个集群资源,但也存在明显的不足,主要体现在三方面:(I)编程门槛高,程序员需要掌握多种编程语言(如MPI的C、Hadoop的Java语言),因此,具有易用性差的缺点;(2)无法重用不同框架的代码,而代码复用在现代软件工程中非常重要,因此,具有开发效率低的缺点;(3)不同作业之间以分布式文件系统(如HDFS, Hadoop Distributed File System,即Hadoop分布式文件系统)的方式来共享数据,带来大量的磁盘I/O开销,因此,具有资源浪费的缺点。
[0003]综上所述,现有的融合多种计算框架的方法及系统还存在着易用性差、开发效率低及资源浪费的缺点。

【发明内容】

[0004]本发明所要解决的技术问题是提供一种用于大数据处理的计算系统及计算方法,用于解决现有融合多种计算框架的方法存在的局限性问题。
[0005]本发明解决上述技术问题的技术方案如下:一种用于大数据处理的计算系统,其运行于多个计算节点,且从下至上依次包括三层模块,分别为最底层模块、中间层模块和最高层模块,中间层模块又包括消息传输模块和计算模型模块;
[0006]所述最底层模块,其采用HDFS,用于存储数据;
[0007]所述消息传输模块,其用于实现在不同计算节点运行的计算模型模块之间传递消息;
[0008]所述在不同计算节点运行的计算模型模块,其根据所述消息传输模块传递的消息实现协同工作,并各自构建特定类型的计算模型来处理从HDFS读取的数据;
[0009]所述最高层模块,其用于为各特定类型的计算模型提供相应的编程接口,并以串行的方式组合不同计算模型表达的计算,同时设置不同计算模型之间基于内存流水线方式共享数据。
[0010]在上述技术方案的基础上,本发明还可以做如下改进。
[0011]进一步,所述最底层模块存储的数据包括输入数据集、中间结果数据集和输出结果数据集。
[0012]进一步,所述消息传输模块包括发送器和接收器,所述发送器用于从处于同一计算节点的计算模型模块中接收消息,并将接收的消息发送给指定的计算节点的接收器,所述接收器用于从网络中接收不同计算节点的发送器发送的消息,并将接收的消息转发给处于同一计算节点的计算模型模块。
[0013]进一步,所述消息传输模块、所述计算模型模块及所述发送器和所述接收器之间传输的消息包括请求消息和响应消息。
[0014]进一步,所述计算模型模块包括若干采用特定类型的计算模型的控制器,还包括与各控制器采用相同计算模型的处理器,所述控制器用于协调其采用的计算模型的执行流程,所述处理器用于接收控制器发送的请求消息,执行控制器指定的数据处理操作,并向控制器汇报响应消息;所述处理器还用于读取HDFS中的输入数据,并向HDFS输出计算结果。
[0015]进一步,所述最高层模块还用于向各特定类型的计算模型提供相应的配置,包括设置输入目录、输出目录、计算节点数目和输出日志目录,所述输入目录用于指定待处理的数据集路径,所述输出目录用于指定最终计算结果的保存路径。
[0016]进一步,当以串行的方式组合不同计算模型表达的计算时,所述最高层模块还用于提供串行组合多种计算模型的编程接口。
[0017]进一步,所述不同类型计算模型包括BSP(Bulk Synchronous Parallel,块同步并行)计算模型、DAG (Directed Acyclic Graph,有向无环图)计算模型、GraphLab计算模型和Spark计算模型。DAG计算模型是一种较为通用的计算模型,微软的Dryad计算框架采用了此模型。Google提出的Pregel图计算框架源自BSP计算模型。GraphLab是一种基于异步模式的计算模型,Spark提出了弹性数据集的概念,采用内存计算的方式提高数据处理的效率。
[0018]本发明的技术方案还包括一种用于大数据处理的计算方法,其采用了上述的计算系统,具体步骤包括:
[0019]步骤I,将待处理数据集上传至HDFS ;
[0020]步骤2,根据待处理数据集的应用需求,将待处理数据集的整个计算流程拆分为多个串行的分段计算流程;
[0021]步骤3,为每个分段计算流程选取特定类型的计算模型,并利用提供的编程接口编写各特定类型的计算模型的相关代码;
[0022]步骤4,采用串行的方式组合不同计算模型表达的计算,同时设置不同计算模型之间基于内存流水线方式共享数据;[0023]步骤5,根据提供的编程接口编写应用程序的相关配置;
[0024]步骤6,执行编写的相关代码。
[0025]进一步,所述计算模型包括BSP计算模型、DAG计算模型、GraphLab计算模型和Spark计算模型。
[0026]本发明的有益效果是:本发明独特之处是在一个计算系统内支持多种计算模型,克服目前的计算框架只能支持一种计算模型的局限性,允许开发人员在一个系统内采用多种计算模型编写应用程序,并可以将多种计算组合在一起,从而解决更复杂的问题。本发明提出的计算系统支持两种主流的计算模型,即DAG和BSP,也还可兼容其他模型,如GraphLab、Spark 等。
【专利附图】

【附图说明】
[0027]图1为本发明所述用于大数据处理的计算系统的结构示意图;
[0028]图2为本发明所述用于大数据处理的计算方法的流程示意图;
[0029]图3为本发明应用例中采用不同数据共享方式的对比图。
[0030]附图中,各标号所代表的部件列表如下:
[0031]1、最底层模块,2、中间层模块,3、最高层模块,21、消息传输模块,22、计算模型模块,211、发送器,212、接收器,221、控制器,222、处理器。
【具体实施方式】
[0032]以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
[0033]如图1所示,本实施例给出了一种用于大数据处理的计算系统,其运行于多个计算节点,从下至上依次包括三层模块,分别为最底层模块1、中间层模块2和最高层模块3,且中间层模块2又包括消息传输模块21和计算模型模块22。
[0034]所述最底层模块1,其采用HDFS,用于存储数据,其存储的数据包括输入数据集、中间结果数据集和输出结果数据集。
[0035]所述消息传输模块21,其用于实现在不同计算节点运行的计算模型模块之间传递消息,包括发送器211和接收器212,所述发送器211用于从处于同一计算节点的计算模型模块22中接收消息,并将接收的消息发送给指定的计算节点的接收器212,所述接收器212用于从网络中接收不同计算节点的发送器发送的消息,并将接收的消息转发给处于同一计算节点的计算模型模块22。所述消息包括请求消息(如执行某个操作的“请求”类消息)和响应消息(如某个操作是否执行完的“响应”类消息)。
[0036]所述在不同计算节点运行的计算模型模块22,其根据所述消息传输模块21传递的消息实现协同工作,并各自构建特定类型的计算模型来处理数据。所述计算模型模块22包括若干采用不同类型计算模型的控制器221,还包括与各控制器采用相同计算模型的处理器222,所述控制器221用于协调其采用的计算模型的执行流程,所述处理器222用于接收控制器221发送的请求消息,执行控制器221指定的数据处理操作,并向控制器221汇报响应消息;所述处理器222还用于读取HDFS中的输入数据,并向HDFS输出计算结果。此外,所述计算模型包括BSP计算模型、DAG计算模型、GraphLab计算模型和Spark计算模型。[0037]所述最高层模块3,其用于为各特定类型的计算模型提供相应的编程接口,并以串行的方式组合不同计算模型表达的计算,同时设置不同计算模型之间基于内存流水线方式共享数据。所述最高层模块还用于向各特定类型的计算模型提供相应的配置,包括设置输入目录、输出目录、计算节点数目和输出日志目录等,所述输入目录用于指定待处理的数据集路径,所述输出目录用于指定最终计算结果的保存路径。当处理拆分过的若干分段计算流程时,通过处理器从HDFS获取数据,同时由于设置不同计算模型之间基于内存流水线方式共享数据,还通过流水线方式从内存中读取前一个分段计算流程的输出数据,经过数据处理后,再输出给下一个分段计算流程,并在整个过程中能够从HDFS读取输入数据和中间数据以及向HDFS写入中间数据和输出数据。
[0038]此外,当以串行的方式组合不同计算模型表达的计算时,各计算模型需进行串行组合,且所述最高层模块还用于提供串行组合多种计算模型的编程接口。如有计算模型A、B和C,将其以A->B->C->A的顺序进行串行组合,而最高层模块则对应提供执行A->B->C->A这个串行组合的编程接口。
[0039]基于上述的计算系统,如图2所示,本发明的技术方案还包括一种用于大数据处理的计算方法,具体步骤包括:
[0040]步骤I,将待处理数据集上传至HDFS ;
[0041]步骤2,根据待处理数据集的应用需求,将待处理数据集的整个计算流程拆分为多个串行的分段计算流程;
[0042]步骤3,为每个分段计算流程选取特定类型的计算模型,并利用提供的编程接口编写各特定类型的计算模型的相关代码;
[0043]步骤4,采用串行的方式组合不同计算模型表达的计算,同时设置不同计算模型之间基于内存流水线方式共享数据;
[0044]步骤5,根据提供的编程接口编写应用程序的相关配置;
[0045]步骤6,执行编写的相关代码。
[0046]基于上述方案,下文给出了采用上述计算系统及方法的基本流程。
[0047](I)将参与计算的所有节点通过交换机连接起来,建立能够相互通信的集群。
[0048](2)在集群的每个节点上部署开源的Hadoop系统,并启动Hadoop系统的HDFS ;
[0049](3)将待处理的数据集上传到HDFS,采用本实施例提出的计算系统,编写数据处理的应用程序,具体实施方法参见上文相关部分。
[0050](4)使用编译器将编写的应用程序编译成一个可执行文件。
[0051](5)从集群中选取一批节点,用来运行作业。节点分为2类,一个是主控节点,其余的是计算节点。
[0052](6)在主控节点上启动可执行程序,设置其参数为master,以下简称为master。
[0053](7)在计算节点上启动可执行程序,设置其参数为worker,以下简称为worker。
[0054](8) master启动后,执行如下的步骤:
[0055]I)首先创建了一个控制器对象(Controller)的队列。
[0056]2)master从队列中弹出一个控制器对象,并执行该控制器。控制器执行的步骤如下:
[0057][l]master的控制器对象负责对worker分配计算任务,发送控制命令给worker,并等待worker的反馈。
[0058][2]根据worker的反馈,controller调度下一步的计算过程。
[0059]上述步骤[I] [2]不断循环,直到一个分段计算流程执行完,controller退出。
[0060]3)当一个分段计算流程执行完,master会从队列中取出下一个controller继续执行。整个过程直到controller队列为空。
[0061](9) worker启动后,执行如下的步骤:
[0062]I)首先向master发送注册信息。
[0063]2)创建一个处理器(handler)队列,然后等待master的控制命令。
[0064]3)接收到master发送来的控制命令,调用handler来执行compute函数。
[0065]4)向master汇报执行状态。
[0066]5)如果接收到退出命令,就退出程序。
[0067]上述步骤3)和步骤4)不断执行。
[0068](10)当master的控制器队列为空时,意味着所有的分段计算流程执行完毕,整个作业也执行完。master通知所有的worker退出计算。Master随之也退出,整个作业的计算完成。
[0069](11)计算完成后,计算结果保存到HDFS中,在输出目录中查看计算结果。
[0070]上述步骤4即是本实施例提出的基于上文所述计算系统的方法,概括如下:
[0071]首先,根据应用的需求,将计算拆分为多个串行的分段计算流程;
[0072]其次,为每个分段计算流程选取合适的计算模型,并编写模型相关的处理函数。对于图计算执行阶段,采用BSP计算模型。对于其他类型的计算,采用DAG计算模型。本实施例的计算系统提供了 DAG和BSP基类库,开发人员需要编写BSP基类库的计算函数和DAG基类库的计算函数。
[0073]最后,采用框架提供的驱动接口,指定多个分段计算流程的代码的串行执行顺序,并配置相应的参数,包括输入目录、输出目录和中间数据集的共享方式。通常,为了提高处理效率,采用在线的中间数据集共享方式,而不是离线的中间数据集共享方式。前者采用基于内存流水线的方式共享数据,后者采用HDFS的方式共享数据。
[0074]以一个具体的应用例对共享集群资源的基本流程的实现步骤做具体的描述。假设需要对一个网页数据集首先进行PageRank计算,求出每个网页的PageRank值;然后对网页的PageRank值进行降序排列。这个计算可以分解为2个分段计算流程:首先采用BSP模型进行PageRank计算,然后采用DAG模型进行排序计算。
[0075]本应用例采用Go语言,且利用开源的分布式文件系统HDFS搭建实验环境,具体实施步骤如下。
[0076](I)将参与计算的所有节点通过交换机连接起来,建立能够相互通信的集群。
[0077](2)在集群的每个节点上部署开源的Hadoop系统,并启动Hadoop系统的HDFS。
[0078](3)将待处理的数据集上传到HDFS。
[0079](4)编写数据处理的应用程序:
[0080]首先,根据应用的需求,将计算拆分为2个串行的分段计算流程:计算PageRank的阶段和排序的阶段;
[0081]其次,计算PageRank阶段,采用BSP计算模型,继承BSP基类,编写相应的计算函数;排序阶段,采用DAG计算模型,继承DAG基类,编写相应的计算函数;
[0082]最后,采用最高层模块提供的驱动API,将编写的BSP子类和DAG子类添加到执行阶段中,配置输入目录和输出目录,并设置中间数据集的共享方式。
[0083](5)使用go build命令,将编写的应用程序编译成一个可执行文件。
[0084](6)从集群中选取一批节点,用来运行作业。节点分为2类,一个是主控节点,其余的是计算节点。
[0085](7)在主控节点上启动可执行程序,设置其参数为master。
[0086](8)在计算节点上启动可执行程序,设置其参数为worker。
[0087](8) master启动后,执行如下的步骤:
[0088]I)首先创建了一个控制器对象(Controller)的队列,共两个对象:一个BSPcontroller,另外一个是 DAG controller?
[0089]2) master从队列中弹出BSP controller对象,并执行该控制器。
[0090]3)当BSP controller对象执行完后,master从控制器对象的队列中取出下一个控制器,即DAG controller,并调用它执行。
[0091]4)当DAG controller执行完后,队列为空。Master通知worker退出计算。
[0092]5) master自身 退出计算。
[0093](9) worker启动后,执行如下的步骤:
[0094]I)首先向master发送注册信息
[0095]2)创建一个处理器(handler)队列,共两个对象:一个BSP handler和一个DAGhandler。等待master的控制命令。
[0096]3)根据master接收到的控制命令,调用BSP handler来执行相应的compute函数。
[0097]4)向master汇报执行状态。
[0098]5)根据master接收到的控制命令,调用DAG handler来执行相应的compute函数。
[0099]6)向master汇报执行状态。
[0100]7)接收到退出命令,worker退出程序。
[0101](10)计算完成后,计算结果保存到HDFS中,在输出目录中查看计算结果。
[0102]本应用例中测试数据集为由benchmark程序生成,产生了 4百万、8百万和1.6千万个顶点的图数据集。首先对数据集进行PageRank计算,然后对计算的PageRank值进行降序排序。PageRank计算使用BSP模型来完成,排序计算使用DAG模型来完成。其中,计算完PageRank后的中间数据集提供给后续的排序计算。同时,本应用例比较了步骤
(4)中两种中间集数据共享方式下的运行时间:基于HDFS方式共享数据和基于内存流水线(In-mermory Pipeline)方式共享数据。图3给出了两种中间数据集的共享方式的对比结果。从图3的对比结果可知,由于基于内存流水线方式避免了大量的HDFS磁盘1/0开销,运行时间比HDFS有明显的缩短。
[0103]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1. 一种用于大数据处理的计算系统,其特征在于,其运行于多个计算节点,且从下至上依次包括三层模块,分别为最底层模块、中间层模块和最高层模块,中间层模块又包括消息传输模块和计算模型模块: 所述最底层模块,其采用Hadoop分布式文件系统,用于存储数据;所述消息传输模块,其用于实现在不同计算节点运行的计算模型模块之间传递消息;所述在不同计算节点运行的计算模型模块,其根据所述消息传输模块传递的消息实现协同工作,并各自构建特定类型的计算模型来处理从Hadoop分布式文件系统读取的数据;所述最高层模块,其用于为各特定类型的计算模型提供相应的编程接口,并以串行的方式组合不同计算模型表达的计算,同时设置不同计算模型之间基于内存流水线方式共享数据。
2.根据权利要求1所述的计算系统,其特征在于,所述最底层模块存储的数据包括输入数据集、中间结果数据集和输出结果数据集。
3.根据权利要求1所述的计算系统,其特征在于,所述消息传输模块包括发送器和接收器,所述发送器用于从处于同一计算节点的计算模型模块中接收消息,并将接收的消息发送给指定的计算节点的接收器,所述接收器用于从网络中接收不同计算节点的发送器发送的消息,并将接收的消息转发给处于同一计算节点的计算模型模块。
4.根据权利要求1或3所述的计算系统,其特征在于,所述消息包括请求消息和响应消息。
5.根据权利要求1所述的计算系统,其特征在于,所述计算模型模块包括若干采用特定类型的计算模型的控制器,还包括与各控制器采用相同计算模型的处理器,所述控制器用于协调其采用的计算模型的执行流程,所述处理器用于接收控制器发送的请求消息,执行控制器指定的数据处理操作,并向控制器汇报响应消息;所述处理器还用于读取Hadoop分布式文件系统中的输入数据,并向Hadoop分布式文件系统输出计算结果。
6.根据权利要求1所述的计算系统,其特征在于,所述最高层模块还用于向各特定类型的计算模型提供相应的配置,包括设置输入目录、输出目录、计算节点数目和输出日志目录,所述输入目录用于指定待处理的数据集路径,所述输出目录用于指定最终计算结果的保存路径。
7.根据权利要求1所述的计算系统,其特征在于,当以串行的方式组合不同计算模型表达的计算时,所述最高层模块还用于提供串行组合多种计算模型的编程接口。
8.根据权利要求1、5、6或7所述的计算系统,其特征在于,所述计算模型包括BSP计算模型、DAG计算模型、GraphLab计算模型和Spark计算模型。
9.一种用于大数据处理的计算方法,其适用于多个计算节点,其特征在于,具体步骤包括: 步骤I,将待处理数据集上传至Hadoop分布式文件系统; 步骤2,根据待处理数据集的应用需求,将待处理数据集的整个计算流程拆分为多个串行的分段计算流程; 步骤3,为每个分段计算流程选取特定类型的计算模型,并利用提供的编程接口编写各特定类型的计算模型的相关代码; 步骤4,采用串行的方式组合不同计算模型表达的计算,同时设置不同计算模型之间基于内存流水线方式共享数据; 步骤5,根据提供的编程接口编写应用程序的相关配置; 步骤6,执行编写的相关代码。
10.根据权利要求9所述的计算方法,其特征在于,所述计算模型包括BSP计算模型、DAG计算模型、Gr`aphLab计算模型和Spark计算模型。
【文档编号】G06F17/30GK103488775SQ201310455174
【公开日】2014年1月1日 申请日期:2013年9月29日 优先权日:2013年9月29日
【发明者】王鹏, 韩冀中, 王伟平, 孟丹, 张云 申请人:中国科学院信息工程研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1