一种基于Cassandra的数据并行处理系统的制作方法

文档序号:6397564阅读:320来源:国知局
专利名称:一种基于Cassandra的数据并行处理系统的制作方法
技术领域
本发明属于计算机领域的分布式计算和系统结构领域,更具体地,涉及一种基于Cassandra的数据并行处理系统。
背景技术
Cassandra是一个开源的、分布式的、无中心、弹性可扩展、高可用、容错、一致性可调、面向列的非关系型数据库。它是基于亚马逊Dynamo数据库的分布式设计和谷歌BigTable的数据模型,由Facebook创建,已经在一些最流行的网站中取得了应用。当前,随着Web2.0的兴起,数据量急剧增长,海量数据的存储和处理需求对传统的关系型数据库提出了挑战,这是因为,传统的关系型数据库无法满足超大规模和高并发的数据处理需求。例如Web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,这样一个较大的网站往往会达到每秒上万次的读写请求,而上万次的SQL写请求,是硬盘IO无法承受的。再者,类似Facebook, twitter之类的网站,每天用户产生海量的用户动态,一个月的用户动态数据会达到上亿条。在一张上亿条记录的大表里面做SQL查询,其效率是极其低下的。而在这种场景之下,Cassandra却能够满足数据处理的需求。由于Cassandra采用了MemTable机制实现读写优化,显著地提升了数据的吞吐率,可以很好地应对高并发的数据读写请求。同时,Cassandra还具有灵活的模式,能够很方便地增加或者删除字段,它采用了P2P架构,使得单点故障不会影响整个集群的服务,并且支持节点的线性扩展。然而,由于Cassandra独特的架构设计,使得其无法支持关系型数据库的诸如连接、条件查询等对数据的复杂处理。在大数据处理领域,谷歌公司提出了针对大规模数据集的并行计算编程模型MapReduce0 Hadoop是MapReduce的一个开源系统,目前已经广泛地被运用于海量数据的存储和处理。在数据处理方面,Hadoop的子项目Hive,Pig都拥有强大的数据处理能力。Hive直接将文本数据在逻辑上处理成一个大表,将传统的SQL命令解释成Hadoop程序对文本进行处理;Pig则可以更加灵活地指定数据的模式,使用面向数据流的Pig Latin语言直接进行数据处理。然而,由于Hadoop是基于分布式文件系统的存储方式,对数据的查询必须遍历整个文件,因此Hadoop不具有针对数据简单查询快速响应的能力。

发明内容
针对现有技术的缺陷,本发明的目的在于提供一种基于Cassandra的数据并行处理系统,旨在解决现有Cassandra系统对数据复杂处理功能的不足,该系统在数据存储方面,具有可靠性高、扩展性好、吞吐率高的优势以及针对数据简单查询快速响应的能力,同时又具备对海量数据的复杂处理能力。为实现上述目的,本发明提供了一种基于Cassandra的数据并行处理系统,包括Hadoop主节点、多个Hadoop子节点以及位于Hadoop子节点上的Cassandra存储端,主节点包括用户接口模块、Cassandra查询模块、作业调度模块、作业队列模块、作业追踪器,子节点包括任务追踪器、输入模块、输出模块以及Mapreduce模块,用户接口模块用于接收用户请求,并判断用户请求的类型是数据查询请求、提交数据处理作业请求还是作业信息查询请求;如果是数据查询请求,则将其发送到Cassandra查询模块,如果是提交数据处理作业请求或作业信息查询请求,则将其发送到作业调度模块,Cassandra查询模块用于根据接收来自于用户接口模块的数据查询请求在Cassandra系统中进行查询,并将查询的结果返回到用户接口模块,作业调度模块用于将提交数据处理作业请求对应的作业提交给作业队列模块,作业调度模块还用于判断该作业信息查询请求对应的作业信息是否为作业追踪器正在处理中的作业信息,若是,则直接将该作业信息返回给用户接口模块,否则在作业队列模块中查询是否存在有对应的作业信息,如果有则将该作业信息返回给用户接口模块,否则查询磁盘的日志文件中是否存在有该作业信息,如果有则将该作业信息返回给用户接口模块,否则返回作业不存在信息给用户接口模块,作业队列模块用于将来自于作业调度模块的作业添加到其作业队列中,并将作业队列中队首的作业传送到作业追踪器,作业追踪器用于将来自于作业队列模块的作业拆分成多个子任务,将每个子任务发送到各个子节点的任务追踪器,将存储端中存储的与该作业对应的待处理数据的存储位置信息以及存储端的网络拓扑信息传送到输入模块,并将处理后数据的存储位置信息传送到输出模块,任务追踪器还用于接收来自主节点的作业追踪器的子任务,并将该子任务发送到Mapreduce模块,Mapreduce模块用于根据子任务请求输入模块从存储端获取待处理数据,输入模块用于根据来自作业追踪器的、与该作业对应的待处理数据的存储位置信息以及存储端的网络拓扑信息从存储端获取待处理数据,并将待处理数据发送到Mapreduce模块,Mapreduce模块还用于对待处理数据进行计算,并将计算结果传送到输出模块,输出模块用于根据来自于作业追踪器的、处理后数据的存储位置信息将计算结果发送到存储端中的对应位置。Cassandra查询模块维护一个Cassandra连接池和一个超时连接,当收到一个用户查询请求,首先检查当前超时连接是否超时,若没有超时,则直接使用当前连接向数据库提交查询请求,如果当前连接已超时,则释放当前连接,并从其维护的连接池中请求一个连接作为当前的连接,并使用当前连接向数据库提交查询请求。当向数据库提交数据查询请求之后,其等待数据库返回查询结果,并将查询结果转发给用户接口模块。作业追踪器正在处理中的作业信息包括作业进度和资源使用率信息。每个子任务都是由一个map或者reduce任务构成,map和reduce任务执行用户上传的作业包中的map函数和reduce函数,每个map函数处理根据其对应的输入模块的配置,读取存储在本地Cassandra节点的一段数据记录并处理。主节点的信息流向为:用户向用户接口模块提交数据查询请求或数据处理作业请求,其中,数据查询请求将被用户接口模块转发至Cassandra数据查询模块,由Cassandra数据查询模块完成数据查询,并将查询结果返回给用户接口模块,用户接口模块再将查询结果返回给用户,而对于用户提交的数据处理作业请求,用户接口模块将作业提交给作业调度模块,作业调度模块按照调度策略将作业加入到作业队列模块,待系统有空闲的任务槽时,作业调度模块从作业队列模块中取出队首作业,提交给作业追踪器,作业追踪器根据个子节点任务追踪器上报的状态,将作业分割为多个任务,并分发给各个子节点上的任务追踪器完成MapReduce任务,在作业处理的过程中,作业追踪器不断向作业调度模块汇报当前作业进度、作业状态等信息,作业调度模块将当前作业信息返回给用户接口模块,用户从用户接口模块获得当前的作业信息。输入模块维护一个面向本地Cassandra存储端的连接池,从作业配置文件中获取Cassandra数据库的关键字空间和列簇名,调用Cassandra中的一致性哈希算法来确定存储在本地节点的数据记录,然后Cassandra存储端中读取存储在本地节点中的数据记录,并把数据记录格式化为键值对形式,向map函数推送键值对数据。Mapreduce模块采用Map函数对本地数据记录进行计算,将计算得到的中间结果键值对输出到Hadoop的本地磁盘临时文件中,Hadoop系统对这些中间结果键值对进行排序和按键进行合并,再由reduce函数对排序和合并后的中间结果键值对进行计算,并将最终的计算结果输出给输出模块。输出模块维护了 一个面向本地Cassandra存储端的连接池,从作业配置文件中获取数据输出的关键字空间和列簇名,把每一个MapReduce输出的键值对转换为一个Cassandra列,存入到Cassandra本地存储端之中。位于每个子节点上的Cassandra存储端和子节点上的输入模块和输出模块进行交互,用于存放原始数据和数据处理结果。通过本发明所构思的以上技术方案,与现有技术相比,本发明具有以下的有益效果:(I)可靠性高由于本发明的系统采用了将Cassandra的数据重定向到Hadoop系统的输入模块,而Cassandra在存储时已将键值对排序,Hadoop通过输入模块读入的数据是被排序的,又由于Cassandra使用了具有分区容错的特性的去中心化分布式架构,因此本发明在数据存储方面,具有高可靠性和可用性。(2)可扩展性强由于本发明中,Cassandra系统的各节点是对等的,若要向集群中新加入存储节点,只需要在新节点上配置其所属的Cassandra集群命名即可,因此本发明具有很强的可扩展性。(3)可支持复杂数据处理由于本发明在Cassandra的基础上集成了 MapReduce数据处理系统,使得整套系统即拥有Cassandra良好的存储性能,又使用MapReduce模块对存储在其中的数据进行并行处理。因此本发明即能针对简单的数据查询和插入操作做出快速响应,也能对系统中的数据进行复杂分析处理。


图1为基于Cassandra的数据并行处理系统的互联拓扑图。图2为基于Cassandra的数据并行处理系统的系统结构示意图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明基于Cassandra的数据并行处理系统包括Hadoop主节点1、多个Hadoop子节点2以及位于Hadoop子节点2上的Cassandra存储端3。本发明使用Hadoop主节点I作为系统头节点来响应客户端请求,管理作业队列,调度各子节点2的计算任务。各个子节点2上的Cassandra存储端3构成Cassandra存储集群,用于存放待处理的数据和处理结果。系统用户通过客户端上传数据处理作业包(如jar包)形式的作业到主节点1,主节点I的作业追踪器将作业分发到从节点2,从节点2的任务追踪器根据作业进行配置,并根据配置结果向其所在的Cassandra存储端3请求数据,并完成数据处理,再将处理结果回存到Cassandra存储端3中。如图2所示,主节点I包括用户接口模块IUCassandra查询模块12、作业调度模块13、作业队列模块14、作业追踪器15。上述模块可以根据需要进行分解,部署在一台或者多台服务器上。子节点2包括任务追踪器21、输入模块22、输出模块23以及Mapreduce模块24。子节点2中的各模块参数由用户提交的作业指定。用户接口模块11用于接收用户请求,并判断用户请求的类型是数据查询请求、提交数据处理作业请求还是作业信息查询请求。如果是数据查询请求,则将其发送到Cassandra查询模块12,如果是提交数据处理作业请求或作业信息查询请求,则将其发送到作业调度模块13。Cassandra查询模块12用于根据接收来自于用户接口模块11的数据查询请求在Cassandra系统中进行查询,并将查询的结果返回到用户接口模块11。具体而言,该模块维护一个Cassandra连接池和一个超时连接,当收到一个用户查询请求,该模块首先检查当前超时连接是否超时,若没有超时,则直接使用当前连接向数据库提交查询请求;如果当前连接已超时,则释放当前连接,并从该模块维护的连接池中请求一个连接作为当前的连接,并使用当前连接向数据库提交查询请求。当向数据库提交数据查询请求之后,该模块等待数据库返回查询结果,并将查询结果转发给用户接口模块11。作业调度模块13用于将提交数据处理作业请求对应的作业提交给作业队列模块
14。具体而言,作业调度模块13根据作业队列模块14的作业调度策略将不同优先级的作业提交给作业队列模块14。作业调度模块13还用于判断该作业信息查询请求对应的作业信息是否为作业追踪器15正在处理中的作业信息(包括作业进度、资源使用率等信息),若是,则直接将该作业信息返回给用户接口模块11,否则在作业队列模块14中查询是否存在有对应的作业信息,如果有则将该作业信息返回给用户接口模块11,否则查询磁盘的日志文件中是否存在有该作业信息,如果有则将该作业信息返回给用户接口模块11,否则返回作业不存在信息给用户接口模块U。用户接口模块11再将作业信息返回给客户端。作业队列模块14用于将来自于作业调度模块13的作业添加到其作业队列中,并将作业队列中队首的作业传送到作业追踪器15。作业追踪器15用于将来自于作业队列模块14的作业拆分成多个子任务,将每个子任务发送到各个子节点2的任务追踪器21,将存储端3中存储的与该作业对应的待处理数据的存储位置信息以及存储端3的网络拓扑信息传送到输入模块22,并将处理后数据的存储位置信息传送到输出模块23。待处理数据为存储端3中的数据。具体而言,每个子任务都是由一个map或者reduce任务构成,map和reduce任务执行用户上传的作业包中的map函数和reduce函数。每个map函数处理根据其对应的输入模块22的配置,读取存储在本地Cassandra节点的一段数据记录并处理。主节点I的信息流向为:用户向用户接口模块11提交数据查询请求或数据处理作业请求。其中,数据查询请求将被用户接口模块11转发至Cassandra数据查询模块12,由Cassandra数据查询模块完成数据查询,并将查询结果返回给用户接口模块11,用户接口模块11再将查询结果返回给用户。而对于用户提交的数据处理作业请求,用户接口模块11将作业提交给作业调度模块13。作业调度模块13按照调度策略将作业加入到作业队列模块14。待系统有空闲的任务槽时,作业调度模块13从作业队列模块14中取出队首作业,提交给作业追踪器15。作业追踪器15根据个子节点任务追踪器21上报的状态,将作业分割为多个任务,并分发给各个子节点上的任务追踪器21完成MapReduce任务。在作业处理的过程中,作业追踪器15不断向作业调度模块13汇报当前作业进度、作业状态等信息,作业调度模块13将当前作业信息返回给用户接口模块11,用户从用户接口模块11获得当前的作业信息。任务追踪器21用于接收来自主节点I的作业追踪器15的子任务,并将该子任务发送到Mapreduce模块24。Mapreduce模块24用于根据子任务请求输入模块22从存储端3获取待处理数据。输入模块22用于根据来自作业追踪器15的、与该作业对应的待处理数据的存储位置信息以及存储端3的网络拓扑信息从存储端3获取待处理数据,并将待处理数据发送到Mapreduce模块24。具体而言,输入模块22实现了将Cassandra中的数据重定向到map任务的功能。该模块尽可能地利用调度计算到数据本地的方式来减少网络开销,提高效率。该模块维护一个面向本地Cassandra存储端的连接池,从作业配置文件中获取Cassandra数据库的关键字空间和列簇名,调用Cassandra中的一致性哈希算法来确定存储在本地节点的数据记录,然后Cassandra存储端中读取存储在本地节点中的数据记录,并把数据记录格式化为键值对形式,向map函数推送键值对数据。Mapreduce模块24用于对待处理数据进行计算,并将计算结果传送到输出模块23。具体而言,是采用Map函数对本地数据记录进行计算,将计算得到的中间结果键值对输出到Hadoop的本地磁盘临时文件中,Hadoop系统对这些中间结果键值对进行排序和按键进行合并,再由reduce函数对排序和合并后的中间结果键值对进行计算,并将最终的计算结果输出给输出I旲块23。输出模块23用于根据来自于作业追踪器15的、处理后数据的存储位置信息将计算结果发送到存储端3中的对应位置。具体而言,输出模块23实现了将Hadoop处理结果重定向到Cassandra的功能。该模块维护了一个面向本地Cassandra存储端的连接池,从作业配置文件中获取数据输出的关键字空间和列簇名,把每一个MapReduce输出的键值对转换为一个Cassandra列,存入到Cassandra本地存储端之中。位于每个子节点2上的Cassandra存储端3,和子节点2上的输入模块22和输出模块23进行交互,用于存放原始数据和数据处理结果。实例:
本发明的主节点I的服务器基本硬件配置如表I所示。如果系统负载较大,可以将主节点I上的模块分别安装在多个服务器上。
权利要求
1.一种基于Cassandra的数据并行处理系统,包括Hadoop主节点、多个Hadoop子节点以及位于Hadoop子节点上的Cassandra存储端,其特征在于, 主节点包括用户接口模块、Cassandra查询模块、作业调度模块、作业队列模块、作业追庄不益; 子节点包括任务追踪器、输入模块、输出模块以及Mapreduce模块; 用户接口模块用于接收用户请求,并判断用户请求的类型是数据查询请求、提交数据处理作业请求还是作业信息查询请求;如果是数据查询请求,则将其发送到Cassandra查询模块,如果是提交数据处理作业请求或作业信息查询请求,则将其发送到作业调度模块; Cassandra查询模块用于根据接收来自于用户接口模块的数据查询请求在Cassandra系统中进行查询,并将查询的结果返回到用户接口模块; 作业调度模块用于将提交数据处理作业请求对应的作业提交给作业队列模块; 作业调度模块还用于判断该作业信息查询请求对应的作业信息是否为作业追踪器正在处理中的作业信息,若是,则直接将该作业信息返回给用户接口模块,否则在作业队列模块中查询是否存在有对应的作业信息,如果有则将该作业信息返回给用户接口模块,否则查询磁盘的日志文件中是否存在有该作业信息,如果有则将该作业信息返回给用户接口模块,否则返回作业不存在信息给用户接口模块; 作业队列模块用于将来自于作业调度模块的作业添加到其作业队列中,并将作业队列中队首的作业传送到作业追踪器; 作业追踪器用于将来自于作业队列模块的作业拆分成多个子任务,将每个子任务发送到各个子节点的任务 追踪器,将存储端中存储的与该作业对应的待处理数据的存储位置信息以及存储端的网络拓扑信息传送到输入模块,并将处理后数据的存储位置信息传送到输出丰吴块; 任务追踪器还用于接收来自主节点的作业追踪器的子任务,并将该子任务发送到Mapreduce 模块; Mapreduce模块用于根据子任务请求输入模块从存储端获取待处理数据; 输入模块用于根据来自作业追踪器的、与该作业对应的待处理数据的存储位置信息以及存储端的网络拓扑信息从存储端获取待处理数据,并将待处理数据发送到Mapreduce模块; Mapreduce模块还用于对待处理数据进行计算,并将计算结果传送到输出模块; 输出模块用于根据来自于作业追踪器的、处理后数据的存储位置信息将计算结果发送到存储端中的对应位置。
2.根据权利要求1所述的数据并行处理系统,其特征在于,Cassandra查询模块维护一个Cassandra连接池和一个超时连接,当收到一个用户查询请求,首先检查当前超时连接是否超时,若没有超时,则直接使用当前连接向数据库提交查询请求,如果当前连接已超时,则释放当前连接,并从其维护的连接池中请求一个连接作为当前的连接,并使用当前连接向数据库提交查询请求。当向数据库提交数据查询请求之后,其等待数据库返回查询结果,并将查询结果转发给用户接口模块。
3.根据权利要求1所述的数据并行处理系统,其特征在于,作业追踪器正在处理中的作业信息包括作业进度和资源使用率信息。
4.根据权利要求1所述的数据并行处理系统,其特征在于,每个子任务都是由一个map或者reduce任务构成,map和reduce任务执行用户上传的作业包中的map函数和reduce函数,每个map函数处理根据其对应的输入模块的配置,读取存储在本地Cassandra节点的一段数据记录并处理。
5.根据权利要求1所述的数据并行处理系统,其特征在于,主节点的信息流向为:用户向用户接口模块提交数据查询请求或数据处理作业请求,其中,数据查询请求将被用户接口模块转发至Cassandra数据查询模块,由Cassandra数据查询模块完成数据查询,并将查询结果返回给用户接口模块,用户接口模块再将查询结果返回给用户,而对于用户提交的数据处理作业请求,用户接口模块将作业提交给作业调度模块,作业调度模块按照调度策略将作业加入到作业队列模块,待系统有空闲的任务槽时,作业调度模块从作业队列模块中取出队首作业,提交给作业追踪器,作业追踪器根据个子节点任务追踪器上报的状态,将作业分割为多个任务,并分发给各个子节点上的任务追踪器完成MapReduce任务,在作业处理的过程中,作业追踪器不断向作业调度模块汇报当前作业进度、作业状态等信息,作业调度模块将当前作业信息返回给用户接口模块,用户从用户接口模块获得当前的作业信
6.根据权利要求1所述的数据并行处理系统,其特征在于,输入模块维护一个面向本地Cassandra存储端的连接池,从作业配置文件中获取Cassandra数据库的关键字空间和列簇名,调用Cassandra中的一致性哈希算法来确定存储在本地节点的数据记录,然后Cassandra存储端中读取 存储在本地节点中的数据记录,并把数据记录格式化为键值对形式,向map函数推送键值对数据。
7.根据权利要求1所述的数据并行处理系统,其特征在于,Mapreduce模块采用Map函数对本地数据记录进行计算,将计算得到的中间结果键值对输出到Hadoop的本地磁盘临时文件中,Hadoop系统对这些中间结果键值对进行排序和按键进行合并,再由reduce函数对排序和合并后的中间结果键值对进行计算,并将最终的计算结果输出给输出模块。
8.根据权利要求1所述的数据并行处理系统,其特征在于,输出模块维护了一个面向本地Cassandra存储端的连接池,从作业配置文件中获取数据输出的关键字空间和列簇名,把每一个MapReduce输出的键值对转换为一个Cassandra列,存入到Cassandra本地存储端之中。
9.根据权利要求1所述的数据并行处理系统,其特征在于,位于每个子节点上的Cassandra存储端和子节点上的输入模块和输出模块进行交互,用于存放原始数据和数据处理结果。
全文摘要
本发明公开了一种基于Cassandra的数据并行处理系统,包括Hadoop主节点、多个Hadoop子节点以及位于Hadoop子节点上的Cassandra存储端,主节点包括用户接口模块、Cassandra查询模块、作业调度模块、作业队列模块、作业追踪器,子节点包括任务追踪器、输入模块、输出模块以及Mapreduce模块,用户接口模块用于接收用户请求,并判断用户请求的类型是数据查询请求、提交数据处理作业请求还是作业信息查询请求;如果是数据查询请求,则将其发送到Cassandra查询模块,如果是提交数据处理作业请求或作业信息查询请求,则将其发送到作业调度模块。本发明具有可靠性高、扩展性好、吞吐率高的优势以及针对数据简单查询快速响应的能力,同时又具备对海量数据的复杂处理能力。
文档编号G06F17/30GK103106249SQ201310006128
公开日2013年5月15日 申请日期2013年1月8日 优先权日2013年1月8日
发明者石宣化, 金海 , 吴松, 刘炜 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1