数据库写入的方法和数据库系统
技术领域
本申请涉及数据库领域,尤其涉及一种数据库写入的方法和数据库系统。
背景技术
在现有的Jstorm应用中,其在Hbase数据库的写入操作,将原始日志和抽取的索引在保存前按照索引+分钟版本将日志内容合并到一行;同时将索引在内存中保存并进行去重操作,以此降低写入频次。但是,由于原始日志的条数很多,写入量很大,现有的Jstorm等流处理应用对Hbase数据库的写入存在瓶颈。
如何避免Hbase数据库写入的瓶颈,提高Hbase数据库写入的效率,是本申请所要解决的技术问题。
发明内容
本申请实施例提供了一种数据库写入的方法和流处理系统,能够提高Hbase数据库写入的效率。
第一方面,提供了一种Hbase数据库写入的方法,该方法包括:
在第一流处理节点接收流分发节点分发的的第一日志数据,该流分发节点为读取准备写入到Hbase数据库的原始日志数据并分发的消息源节点,该第一流处理节点为直接接收到该流分发节点分发的数据的消息流处理节点;
在第一流处理节点中解析处理该第一日志数据中的日志得到第二日志数据,并确定该第二日志数据中日志对应的表格和区域;
在第一流处理节点将该第二日志数据中的日志携带的内容按照表格和区域路由到对应的第二流处理节点,该第二流处理节点为该流分发节点的末端消息流处理节点;
在第二流处理节点将接收到的日志按照表格和区域进行合并形成第三日志数据;
在第二流处理节点将该第三日志数据中表格名称为第一表格,区域标识为第一区域标识的数据,通过Hbase数据库中该第一表格和该第一区域标识对应的区域服务器,以put操作的方式写入该第一表格和该第一区域标识对应的区域。
第二方面,提供了一种流处理系统,包括:流分发节点、第一流处理节点和第二流处理节点,其中,
流分发节点,读取准备写入到Hbase数据库的原始日志数据并向各第一流处理节点分发;
第一流处理节点,接收流分发节点分发的的第一日志数据,解析处理该第一日志数据中的日志得到第二日志数据,并确定该第二日志数据中日志对应的表格和区域,并将该第二日志数据中的日志携带的内容按照表格和区域路由到对应的第二流处理节点,其中,该第一流处理节点为直接接收到该流分发节点分发的数据的消息流处理节点;
第二流处理节点,将接收到的日志按照表格和区域进行合并形成第三日志数据,并将该第三日志数据中表格名称为第一表格,区域标识为第一区域标识的数据,通过Hbase数据库中该第一表格和该第一区域标识对应的区域服务器,以put操作的方式写入该第一表格和该第一区域标识对应的区域,其中,该第二流处理节点为该流分发节点的末端消息流处理节点。
由以上本申请实施例提供的技术方案可见,本申请实施例通过将日志数据按照表格和区域路由到该表格和区域对应的第二流处理节点中,并在第二流处理节点将属于同一表格的同一区域的日志数据合并到同一个区域中,再通过该表格和区域对应的区域服务器写入到Hbase数据库中,从而能够减少Hbase数据库的客户端的远程过程调用协议(RemoteProcedure Call Protocol,RPC)连接次数,并减少写入次数,提高Hbase数据库的写入性能。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是Storm或Jstorm的流处理框架示意图。
图2是Hbase数据库的访问示意图。
图3是本申请的一个实施例Hbase数据库的写入方法流程图。
图4是本申请的一个实施例Hbase数据库的写入方法的具体流程图。
图5是本申请的一个实施例的电子设备的示意结构图。
图6是本申请的一个实施例流处理系统的结构示意图。
具体实施方式
为了方便理解本申请实施例,首先在此介绍本申请实施例描述中会引入的几个要素。
Storm:是由BackType开发的实时处理系统。Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算。Storm保证每个消息都会得到处理,并且处理速度很快,在一个小集群中,每秒可以处理数以百万计的消息。Storm的术语包括消息流(Stream)、消息源(Spout)、消息处理者(Bolt)、任务(Task)、工作者(Worker)、Stream Grouping和Topology等。Stream是被处理的数据;Spout是数据源;Bolt处理数据;Task是运行于Spout或Bolt中的线程;Worker是运行这些线程的进程。
消息流(Streams):消息流是Storm中最关键的抽象,一个消息流就是一个没有边界的tuple序列,tuple是一种Storm中使用的数据结构,可以看作是没有方法的Java对象。这些tuple序列会被一种分布式的方式并行地在集群上进行创建和处理。对消息流的定义主要就是对消息流里面的tuple进行定义,为了更好地使用tuple,需要给tuple里的每个字段取一个名字,并且不同的tuple字段对应的类型要相同,即两个tuple的第一个字段类型相同,第二个字段类型相同,但是第一个字段和第二个字段的类型可以不同。
消息源(Spouts):Spouts是Storm集群中一个计算任务(Topology)中消息流的生产者,Spouts一般是从别的数据源(例如,数据库或者文件系统)加载数据,然后向Topology中发射消息。每个Spouts都可以发射多个消息流。
消息处理者(Bolts):所有消息处理的逻辑都在Bolt中完成,在Bolt中可以完成如过滤、分类、聚集、计算、查询数据库等操作。Bolt可以做简单的消息处理操作,例如,Bolt可以不做任何操作,只是将接收到的消息转发给其他的Bolt。Bolt也可以做复杂的消息流的处理,从而需要很多个Bolt。在实际使用中,一条消息往往需要经过多个处理步骤。
Jstorm:是一个类似于Hadoop的MapReduce的计算系统,它是由Alibaba开源的实时计算模型,通过使用Java重写了原生的Storm模型(Clojure和Java混合编写的),并且在原来的基础上做了许多改进。在Jstorm中,每个Stream都有一个Stream的来源,即Tuple的源头,这个源头抽象为Spout。在有了Spout后,接下来需要处理相关内容。类似的,Jstorm的处理过程抽象为Bolt,Bolt可以流入到该Bolt的任意数量的输入流进行处理,也可以发送新的流给其他的Bolt使用。在Jstorm中,只需要开启特定的Spout,将Spout流出的Tuple导向特定的Bolt,然后Bolt对导入的流做处理后再导向其它的Bolt等。
Hbase:是一个分布式的、面向列的开源数据库。在Hbase中,以表的形式存储数据。Hbase的表由行和列组成,列可划分为多个列族;Hbase的表以row key(行键)作为检索的主键;Hbase的表在行的方向上分割为多个区域(Region),每个Region是分布式存储的最小单元。在Hbase数据库中,包括客户端(Client)、Zookeeper、Master、
客户端(Client)包含访问Hbase的接口,Client维护着一些cache来加快对Hbase的访问,比如Region的位置信息。
Zookeeper:保证任何时候,集群中只有一个管理者(Master);存贮所有Region的寻址入口;实时监控区域服务器(Region Server)的状态,将Region Server的上线和下线信息实时通知给Master;存储Hbase的schema,包括有哪些表格(table),每个table有哪些column family,等等。
管理者(Master):为区域服务器(Region Server)分配Region;负责RegionServer的负载均衡;发现失效的Region Server并重新分配其上的Region;GFS上的垃圾文件回收;处理schema更新请求。
区域服务器(Region Server):Region Server维护Master分配给它的Region,处理对这些Region的IO请求;Region Server还负责切分在运行过程中变得过大的Region。
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
图1是Storm或Jstorm等流处理工具数据流的流向示意图。如图1所示,消息源Spout节点将数据流随机分发给Bolt节点,Bolt节点接收到数据流后,进行处理并传给下一个Bolt节点。其中,数据流可以采用如tuple的结构形式传输。图1的Spout节点即本申请的流分发节点或消息流源节点,Bolt节点即本申请的消息流处理节点。
图2是本申请实施例Hbase数据库的保存数据的流程示意图。如图2所示,用户在使用Storm或Jstorm等调用HbaseClient api进行puts的操作,Hbase Client会查询这一批数据分别属于那些Region Server并分别进行多次rpc请求进行处理。服务器端RegionServer接收到客户端的写入请求后,首先会反序列化为Put对象,然后执行各种检查操作,比如检查Region是否是只读、memstore大小是否超过blockingMemstoreSize等。检查完成之后,可进行如下操作:
(1)获取行锁、Region更新共享锁;
(2)开始写事务;
(3)写缓存memstore;
(4)追加写入HLog;
(5)释放行锁以及共享锁;
(6)同步HLog到HDFS;
(7)结束写事务;
(8)启动flush线程将数据刷新到硬盘。
图3是本申请的一个实施例Hbase数据库的写入方法流程图。图3的方法由Storm应用或Jstorm应用执行。图3的方法可包括:
S301,在第一流处理节点接收流分发节点分发的第一日志数据。
其中,该流分发节点为读取准备写入到Hbase数据库的原始日志数据并分发的消息源节点,该第一流处理节点为直接接收到该流分发节点分发的数据的消息流处理节点。
应理解,在Storm或Jstorm系统中,该流分发节点为Spout节点,该第一流处理节点与Spout节点相连,直接接收Spout节点分发数据的消息流处理节点。
应理解,在本申请实施例中,流分发节点可不断地读取准备预写入到Hbase数据库的原始日志数据,并以数据流的形式将日志数据分发到各个第一流处理节点。通常情况下,流分发节点在分发日志数据时是以随机的方式发送的。当然,如果流分发节点改变发送机制,本申请实施例在此也不做限制。
S302,在第一流处理节点中解析处理该第一日志数据中的日志得到第二日志数据,并确定该第二日志数据中日志对应的表格和区域。
应理解,第一流处理节点在解析第一日志数据的日志时,通常会按日志逐条解析,并确定每条日志对应的表格(table)和区域(Region)。
S303,在第一流处理节点将该第二日志数据中的日志携带的内容按照表格和区域路由到对应的第二流处理节点。
其中,该第二流处理节点为该流分发节点的末端消息流处理节点。
应理解,该第二流处理节点为该流分发节点的末端消息流处理节点,是指第二流处理节点为消息流处理的叶子节点,第二流处理节点不会将流传递到下一个流处理节点中。以Storm系统或Jstorm系统为例,第二流处理节点为Storm系统或Jstorm系统中的末端流处理节点,不会将流传递到Storm系统或Jstorm系统中下一个Bolt节点中。
应理解,在本申请实施例中,同一表格下同一区域的日志将流向同一个末端消息流处理节点。
S304,在第二流处理节点将接收到的日志按照表格和区域进行合并形成第三日志数据。
应理解,在第二流处理节点中,将接收到的日志按照表格和区域进行合并,是指将属于同一表格的同一区域的日志数据合并到一个区域中。
S305,在第二流处理节点将该第三日志数据中表格名称为第一表格,区域标识为第一区域标识的数据,通过Hbase数据库中该第一表格和该第一区域标识对应的区域服务器,以推送操作的方式写入该第一表格和该第一区域标识对应的区域。
应理解,在本申请实施例中,区域标识可以为Region编号或其它能够唯一标识Region的标识。
当然,应理解,本申请中的流分发节点和Bolt节点也可采用其它流处理系统中具有类似功能的节点代替,本申请实施例在此不作限制。
在本申请实施例中,通过将日志数据按照表格和区域路由到该表格和区域对应的第二流处理节点中,并在第二流处理节点将属于同一表格的同一区域的日志数据合并到同一个区域中,再通过该表格和区域对应的区域服务器写入到Hbase数据库中,从而能够减少Hbase数据库的客户端的rpc连接次数,并减少写入次数,提高Hbase数据库的写入性能。
在仿真训练中,采用本申请实施例的方法,在保证Hbase集群稳定的情况下,可以使得Hbase的吞吐量提高50%。
可选地,作为一个实施例,步骤S302具体实现为:
在第一流处理节点中解析处理该第一日志数据中的日志进行结构化处理得到结构化的日志数据;
在第一流处理节点中按照该结构化的日志数据所属的表和关键字key对该结构化的日志数据进行索引;
在第一流处理节点中按照表格、索引和预定时间版本,或者按照表格和索引对该结构化的日志数据进行内容合并形成该第二日志;
在第一流处理节点中根据表格和索引确定该第二日志中日志对应的表格和区域。
本申请实施例中,在第一流处理节点按照表格、索引和预定时间版本,或者按照表格和索引对日志数据进行内容合并,也能够减少Hbase数据库的客户端的rpc连接次数,并减少写入次数,提高Hbase数据库的写入性能。
可选地,作为一个实施例,步骤S303具体实现为:
在第一流处理节点将该第二日志数据中的日志发送给第三流处理节点,该第三流处理节点为在第一流处理节点和第二流处理节点之间传递该第二日志数据的内容的消息处理者节点;
在第三流处理节点将按照表格、索引和预定时间版本,或者按照表格和索引对接收到的该第二日志数据进行内容合并形成第四日志数据;
在第三流处理节点将该第四数据携带的内容按照表格和区域路由到对应的第二流处理节点。
在本申请实施例中,在第一流处理节点和第二流处理节点之间的第三流处理节点按照表格、索引和预定时间版本,或者按照表格和索引对日志数据进行内容合并,也能够减少Hbase数据库的客户端的rpc连接次数,并减少写入次数,提高Hbase数据库的写入性能。
可选地,当按照表格、索引和预定时间版本进行日志合并时,该预定时间版本为30秒版本、分钟版本、5分钟版本或10分钟版本。
可选地,作为一个实施例,步骤S305具体实现为:当该第三日志数据中表格名称为第一表格,区域标识为第一区域标识的数据大于或等于第一预定阈值时,将该第三日志数据中表格名称为第一表格,区域标识为第一区域标识的数据,通过Hbase数据库中该第一表格和该第一区域标识对应的区域服务器,以put操作的方式写入该第一表格和该第一区域标识对应的区域。
本申请实施例中,通过在一个Region的数据大于或等于第一预定阈值时再进行写入操作,也能够减少Hbase数据库的客户端的rpc连接次数,并减少写入次数,提高Hbase数据库的写入性能。
可选地,作为另一个实施例,步骤S305具体实现为:当距离该第三日志数据中表格名称为第一表格,区域标识为第一区域标识的数据写入该Hbase数据库的时间大于或等于第二预定阈值时,将该第三日志数据中表格名称为第一表格,区域标识为第一区域标识的数据,通过Hbase数据库中该第一表格和该第一区域标识对应的区域服务器,以put操作的方式写入该第一表格和该第一区域标识对应的区域。
本申请实施例中,通过间隔第二预定时间进行写入操作,也能够减少Hbase数据库的客户端的rpc连接次数,并减少写入次数,提高Hbase数据库的写入性能。
下面,将结合具体的实施例,对本申请实施例的方法做进一步的描述。
图4是本申请的实施例Hbase数据库的写入方法的具体流程图。在图4所示实施例中,以Jstorm的Spout和Bolt节点为例结合Hbase数据库进行举例说明。当然,应理解,本申请中的流分发节点和Bolt节点也可采用其它流处理系统中具有类似功能的节点代替,本申请实施例在此不作限制。在本申请实施例中,将Bolt节点分为3类,分别是直接从流分发节点接收数据的第一流处理节点、消息处理的终端节点或叶子节点第二流处理节点,以及位于第一流处理节点和第二流处理节点之间的路由路径上的第三流处理节点。
当然,应理解,图4虽然只示出了第一流处理节点和第二流处理节点之间的路由路径上的一个第三流处理节点,但在实际的应用中,第一流处理节点和第二流处理节点之间的路由路径上也可能包括多个第三流处理节点。另外,在本申请实施例中,也可以不存在第三流处理节点。
图4的方法包括:
401,Spout节点分发日志数据。
在本申请实施例中,Spout节点即为图3所示实施例的流分发节点。
Spout节点可按块拉取Hbase数据库的原始日志数据,并批量分发到下游节点。
402,splitBolt节点进行日志解析,处理,并发送。
在本申请实施例中,splitBolt节点即为图3所示实施例的第一流处理节点。
应理解,在本申请实施例中,splitBolt节点接收到Spout中分发的日志数据后,首先需要对日志进行解析。对原始日志进行日志解析,是为了将日志文本数据结构化。例如,
原始日志:
2016-12-12 07:05:32,162[3005][lian.du,S,-,open/abnormalEvents.json,null,null]
在对上述原始日志进行日志解析时,可采用”,”号进行文本切分。另外,可定义要要保存的value是整条原始日志,或者要保存的是对应访问的链接如:open/abnormalEvents.json,等等。具体实现可参考现有技术。
当完成日志解析之后,可对数据进行索引抽取,将索引作为rowkey路由。
在本申请实施例中,需要以表格(table)+区域(Region)信息作为路由策略。
以上述日志为例,通过配置可以定义lian.du为查询索引。定义查询索引是为了保存到Hbase的rowkey,后续的查询可以通过rowkey进行数据查询。
另外,在本申请实施例中,为了确定日志所属的Region,可建立一个读取Region信息的线程。由于Hbase表的Region是按rowkey来定义的,通过rowkey查询到是分配到那个Region里,如:
| Region ID |
开始key |
结束key |
| 1 |
00001 |
00100 |
| 2 |
00101 |
00200 |
当rowkey为00099时,则读取Region信息的线程可知道对应的区域Id为1。
在splitBolt节点确定日志的table和Region的信息后,即可根据table+Region的路由策略发送结构化的日志数据至下一Bolt节点。
当然,应理解,在splitBolt节点中,还可对数据按照table+rowkey对日志内容进行合并。对日志内容进行合并的输入为结构化日志后的索引和value。
例如,假设两条要合并的数据如下:
| Key |
value |
| lian.du |
open/abnormalEvents.json |
| lian.du |
open/other.json |
则输出的结果如下:
日志内容进行合并的目的是为了在保存到Hbase数据库时,将多条索引key相同的日志合并成一条日志,可以简单的理解是将多条value以”,”号分隔保存。
另外,由于日志数据的庞大,为避免合并太多日志导致value值太大,可考虑按照table+rowkey+预定时间版本进行合并。该预定时间版本可以是30秒版本、分钟版本、5分钟版本或10分钟版本,等等。例如,按照table+rowkey+分钟版本进行合并,则表示将1分钟内同一table和rowkey的日志内容进行合并。
403,midBolt节点进行处理,路由发送。
在本申请实施例中,midBolt节点即为图3所示实施例的第三流处理节点。
midBolt节点接收到上游节点路由到本节点的日志数据后,可根据实际情况需要进行处理。
可选地,作为一种方案,midBolt节点可直接将路由到本节点的日志数据路由到下一Bolt节点。
或者,可选地,作为另一种方案,midBolt节点还可对数据按照table+rowkey对日志内容进行合并,或者按照table+rowkey+预定时间版本进行合并,再将合并后的日志数据路由到下一Bolt节点。
当然,应理解,步骤403是可选地。
404,HbaseRegionBolt节点合并,写入。
在本申请实施例中,HbaseRegionBolt节点即为图3所示实施例的第二流处理节点。
HbaseRegionBolt节点的主要功能是将路由到本节点的日志数据按照table+Region进行Region合并,即具有相同table名称和Region标识的日志合并到同一个Region中。具体地,Region标识可以是Region的编号。
完成Region合并后,针对每个Region,HbaseRegionBolt节点可建立与该Region对应的RegionServer的连接,并通过该RegionServer将日志数据以put操作的方式写入到Hbase数据库中。应理解,此处的RegionServer即为图3所示实施例的区域服务器。
具体地,HbaseRegionBolt节点可在Region对应的文件大小大于或等于预定阈值时,将Region的数据写入Hbase数据库中。
或者,HbaseRegionBolt节点可定时将Region对应的日志写入到Hbase数据库中。
图5示出了根据本申请的一示例性实施例的电子设备的示意结构图。请参考图5,在硬件层面,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成用户界面解锁的装置。当然,除了软件实现方式之外,本申请并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
图6是本申请的一个实施例的流处理系统600的结构示意图。请参考图6,在一种软件实施方式中,流处理系统600可包括流分发节点610、第一流处理节点620和第二流处理节点630,其中,
流分发节点610,读取准备写入到Hbase数据库的原始日志数据并向各第一流处理节点620分发;
第一流处理节点620,接收流分发节点610分发的的第一日志数据,解析处理该第一日志数据中的日志得到第二日志数据,并确定该第二日志数据中日志对应的表格和区域,并将该第二日志数据中的日志携带的内容按照表格和区域路由到对应的第二流处理节点630,其中,该第一流处理节点620为直接接收到该流分发节点610分发的数据的消息流处理节点;
第二流处理节点630,将接收到的日志按照表格和区域进行合并形成第三日志数据,并将该第三日志数据中表格名称为第一表格,区域标识为第一区域标识的数据,通过Hbase数据库中该第一表格和该第一区域标识对应的区域服务器,以put操作的方式写入该第一表格和该第一区域标识对应的区域,其中,该第二流处理节点630为该流分发节点610的末端消息流处理节点。
在本申请实施例中,通过将日志数据按照表格和区域路由到该表格和区域对应的第二流处理节点中,并在第二流处理节点将相同表格和区域的日志数据合并到同一个区域中,再通过该表格和区域对应的区域服务器写入到Hbase数据库中,从而能够减少Hbase数据库的客户端的rpc连接次数,并减少写入次数,提高Hbase数据库的写入性能。
可选地,作为一个实施例,第一流处理节点620中解析处理该第一日志数据中的日志得到第二日志数据,并确定该第二日志数据中日志对应的表格和区域包括:
第一流处理节点620解析处理该第一日志数据中的日志进行结构化处理得到结构化的日志数据;
第一流处理节点620按照该结构化的日志数据所属的表和关键字key对该结构化的日志数据进行索引;
第一流处理节点620按照表格、索引和预定时间版本,或者按照表格和索引对该结构化的日志数据进行内容合并形成该第二日志;
第一流处理节点620根据表格和索引确定该第二日志中日志对应的表格和区域。
可选地,作为另一个实施例,该系统还包括第三流处理节点,该第三流处理节点为在第一流处理节点620和第二流处理节点630之间传递该第二日志数据的内容的消息处理者节点,
第一流处理节点620将该第二日志数据中的日志携带的内容按照表格和区域路由到对应的第二流处理节点630包括:第一流处理节点620将该第二日志数据中的日志发送给第三流处理节点,通过第三流处理节点处理并路由到对应的第二流处理节点630;
其中,第三流处理节点处理并路由到对应的第二流处理节点630包括:第三流处理节点将按照表格、索引和预定时间版本,或者按照表格和索引对接收到的该第二日志数据进行内容合并形成第四日志数据;第三流处理节点将该第四数据携带的内容按照表格和区域路由到对应的第二流处理节点630。
进一步地,在上述两个实施例中,当按照表格、索引和预定时间版本进行合并时,该预定时间版本为30秒版本、分钟版本、5分钟版本或10分钟版本。
可选地,作为一个实施例,第二流处理节点630将该第三日志数据中表格名称为第一表格,区域标识为第一区域标识的数据,通过Hbase数据库中该第一表格和该第一区域标识对应的区域服务器,以put操作的方式写入该第一表格和该第一区域标识对应的区域,包括:
当该第三日志数据中表格名称为第一表格,区域标识为第一区域标识的数据大于或等于第一预定阈值时,第二流处理节点630将该第三日志数据中表格名称为第一表格,区域标识为第一区域标识的数据,通过Hbase数据库中该第一表格和该第一区域标识对应的区域服务器,以put操作的方式写入该第一表格和该第一区域标识对应的区域。
可选地,作为一个实施例,第二流处理节点630将该第三日志数据中表格名称为第一表格,区域标识为第一区域标识的数据,通过Hbase数据库中该第一表格和该第一区域标识对应的区域服务器,以put操作的方式写入该第一表格和该第一区域标识对应的区域,包括:
当距离该第三日志数据中表格名称为第一表格,区域标识为第一区域标识的数据写入该Hbase数据库的时间大于或等于第二预定阈值时,第二流处理节点630将该第三日志数据中表格名称为第一表格,区域标识为第一区域标识的数据,通过Hbase数据库中该第一表格和该第一区域标识对应的区域服务器,以put操作的方式写入该第一表格和该第一区域标识对应的区域。
流处理系统600还可执行图3所示实施例的方法,具体实现可参考图3、图4所示实施例,本申请实施例在此不再赘述。
本申请实施例还公开了一种计算机可读存储介质,用于存储计算机程序,该计算机程序包括用于执行图3所示实施例中的方法的指令。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。