数据处理方法及系统的制作方法_2

文档序号:9708326阅读:来源:国知局
的计算拓扑,Bolt和Spout通过Worker进程中的线程运行,线程也可以称为任务(Task);Spout为Storm系统中流的源头,用于从外部数据源(如消息队列或数据库)获取流并发送至Storm ;Bolt为Storm系统中的计算单元,它可以只传输流,也可以根据自身的消息处理逻辑处理来自上游(Bolt或Spout)的流,进行过滤,聚合,查询等操作,并根据处理逻辑向下游的Bolt发送处理后的流或将处理后得到的结果入库存储。
[0063]Topology中每一个计算组件(Spout和Bolt)都有一个并行执行度,在创建Topology时可以进行指定,Zookeeper会在集群内分配对应并行度个数的线程(也即Task)来同时运行组件;如图3所示,Topology中使用流(也即消息流)分组(StreamingGrouping)来指定组件之间的流的发送,即Bolt/上游Spout发送(也可以称为发射)流的目标下游Bolt、以及目标下游Blot中用于处理流的目标Task ;在如图3的示出的流分组一个示意图中,Spout将流发送至下游的Bolt a和Bolt b中Task处理,Bolt b将处理后的结果发送至Bolt c中的Task。
[0064]提交Topology至Storm集群以部署Storm系统的一个示意图如图4所示,主节点中的Nimbus获取到提交的Topology (提交的Topology为可执行文件,对应的代码中已经描述有图3所示的拓扑信息),Nimbus与Zookeeper交互,获取工作节点的心跳信息,并通过Zookeeper向工作节点中Supervisor分派任务,由Supervisor启动Worker中的线程来执行任务;Worker还向Zookeeper发送心跳信息。
[0065]发明人在实施本发明的过程中发现,相关技术提供的Storm系统(也即通过Topology实现Storm系统的拓扑)对流进行处理的流程图如图5所示,包括数据获取、数据清洗和更新计算结果;上述处理由Storm系统中的组件如Spout或Bolt来实现;其中,
[0066]数据获取,是指Spout从外部系统获取需要处理的数据;例如可以从redis或kafka消息队列中拉取待处理的原始数据;数据以流的形式在Storm系统中的组件之间传递(流的基本单位为元组);
[0067]数据清洗,指的是对原始数据进行缺省值填充、特殊值对齐处理、合法性判断等操作,然后根据(Bolt)自身的业务逻辑过滤掉不需要的数据即“脏数据”的过程;
[0068]更新计算结果:是指Bolt根据业务逻辑、以及来自上游的数据更新相应的数据指标,或是对计算结果进行入库存储。
[0069]可以看出,相关技术提供的Storm系统在实际应用中存在以下问题:
[0070]待处理数据存储负荷重,影响了 Storm系统的数据吞吐能力;由于Storm系统往往用来处理海量数据(TB级别甚至更大),相关技术提供的Storm系统的数据吞吐能力无法满足处理海量数据的需求,例如当Storm系统需要针对业务数据进行处理以得到每月的业务信息时,需要从数据源获取每天的业务数据并分别对每天的业务数据进行处理,以得到一个月份的业务信息;这就导致未及时进行处理的业务数据必然会给Storm系统带来相当大的存储压力,影响Storm系统的数据吞吐性能。
[0071]发明人还发现,如果Storm系统中的Bolt能够按照业务处理策略中不同的处理粒度要求对业务数据进行合并,并利用合并后的元组在Storm系统中的不同层进行处理得到业务信息,则能够明显提升Storm系统的数据吞吐性能,下面将进行详细说明。
[0072]实施例一
[0073]本实施例记载一种数据处理方法,可以应用于数据处理系统(如Storm系统),如图6a所示,本实施例记载的数据处理方法包括以下步骤:
[0074]步骤101,所述数据处理系统根据预设数据源配置信息从数据源获取业务数据。
[0075]作为一个示例,Storm系统中的组件Spout可以从外部数据源获取业务数据。
[0076]步骤102,将所获取的业务数据分配到所述数据处理系统的N个数据处理层。
[0077]N为所述业务数据对应的业务处理策略指示的不同粒度的数量,所述粒度为对所述业务数据进行处理以得到业务信息的基本单位,N为大于1的整数。
[0078]步骤103,在所述数据处理系统的第i处理层,以第i粒度对所接收的业务数据进行合并,得到第i粒度业务数据。
[0079]i为大于等于1且小于等于N的整数;
[0080]步骤104,利用所述业务数据对应的业务处理策略,对所述第i粒度业务数据进行处理,得到第i业务信息。
[0081]其中,所述第i粒度大于第i_l粒度,所述第i_l粒度为在所述数据处理系统的第1-Ι处理层对所接收的业务数据进行合并的粒度;需要指出的是,所述第i粒度可以采用时间维度和空间维度的至少之一,例如,所述第1-ι粒度可以采用月份和省份为单位,所说第i粒度可以采用年和全国为单位。
[0082]作为一个示例,每个数据处理层可以包括Storm系统中的一个或多个Bolt组件;每个数据处理层包括的Bolt进行该数据处理层接收的业务数据的合并,并根据合并后的业务数据、以及业务处理策略进行处理得到业务消息;这里所述的业务处理策略可以包括以下基本操作:过滤,聚合,查询。
[0083]作为一个示例,当所述业务数据以元组的形式封装时,所述在数据处理系统的第i处理层,以第i粒度对所接收的业务数据进行合并,可以提取所述第i粒度对应的业务数据的元组中封装的业务数据字段;根据所述元组对应的元组类型,将所提取的业务数据字段存储至目标元组,将所述目标元组标识为以所述第i粒度合并的业务数据的元组。
[0084]下面结合具体示例对上述步骤进行说明,设业务处理策略指示根据每天的更新的业务数据进行一次处理得到业务信息,根据每周更新的业务数据进行一次更新处理得到业务信息;Storm系统的一个结构示意图如图6b所示,可以看出,Storm系统中设置有两个数据处理层,第一数据处理层包括Bolt bl和Bolt cl ;第二数据处理层包括Bolt bl和Boltcl ;其中,第一数据处理层用于属于每天的业务消息,第二数据处理层用户输出每周的业务消息;当用每天更新的业务数据进行计算时,第二数据处理层的Bolt b2首先将每周的更新的业务数据进行合并(也即将最小粒度的业务数据进行合并),并由Bolt c2利用合并后的业务数据进行计算当利用每周的更新的业务数据进行计算时,Bolt b2首先将每周的更新的业务数据进行合并(也即将最小粒度的业务数据进行合并),并由Bolt c2利用合并后的业务数据进行计算,这样Spout可以一次性从外部数据源获取每周更新的业务数据,而不是每次获取一天更新的业务数据,并重复执行,直至获取到每周更新的业务数据;从而可以提升Spout—次从外部数据源获取数据的总量,进而提升了 Storm系统的数据吞吐性能。
[0085]发明人在实施本发明的过程中,还发现相关技术提供的Storm存在无法支持多业务同时接入的问题;由于Storm系统中的Bolt的代码耦合度过重致使复用性差,导致无法对来自对接入的多个数据源的业务数据进行处理;也就是说,同一 Storm系统(也即使用一个Topology部署至Storm集群的Storm系统)无法对来自多个数据源的业务数据进行处理;当需要对多个数据源的业务数据进行处理得到业务信息时,需要对根据每个数据源内的业务数据的业务处理策略,向Storm集群提交对应的Topology以部署Storm系统;对Storm集群的计算资源造成了浪费,提高了数据处理的实施成本。
[0086]鉴于上述问题,发明人在实施本发明的过程中发现,相关技术提供的Storm中,在组件(Spout、Bolt)之间传递的元组(传输的流的基本单位)仅仅封装有原始的ASCII数据或二进制数据,当元组在组件之间以流的形式传递时,Bolt必然需要根据自身的业务逻辑对数据进行处理,不同的业务的数据需要进行不同的处理,导致Bolt的代码复用率低下;如果Storm系统能够根据业务数据的数据结构,将业务数据的业务处理策略(也可以称为业务处理逻辑)封装入数据结构的内部;相当于对来自不同数据源的业务数据进行归一化处理,使Bolt根据接收到的元组中封装的业务处理策略对元组中的数据进行处理,从而使Bolt可以支持多种业务数据的接入,并根据元组中封装的业务处理策略对元组中的数据进行处理;
[0087]例如,当数据结构采用元组类型时,可以采用以下方式将业务数据的业务处理策略封装入元组类型的内部,在所述元组类型内部封装至少一个处理接口:数据获取接口 ;数据清洗接口 ;数据合并接口 ;数据更新接口 ;其中,所述处理接口与所述业务处理策略指示对所述业务数据进行的处理对应;
[0088]相应地,当数据处理系统根据预设数据源配置信息从数据源获取业务数据时,可以通过调用所述元组类型中封装的数据获取接口对所述元组类型进行实例化,也即在所述元组类型内部填充从所述数据源获取的业务数据,从而得到封装有所述业务数据的元组;当在第i数据处理层利用所述业务数据对应的业务处理策略,对所述第i粒度业务数据进行处理时,可以采用调用以下处理接口至少一个处理封装有所述第i粒度业务数据的元组:调用数据清洗接口、数据合并接口、数据更新接口 ;
[0089]如图6c所示,将数据获取的业务处理策略以Retriver接口(interface)表示,将数据清洗和归一化的业务处理策略以Parser interface表示;将数据合并的业务处理策略以Combiner interface表示;将更新计算结果的业务处理策略以Updater interface表示;
[0090]Bolt 中将兀组向上转型(upcasting)为 Retriver interface,并调用 Retriverinterface定义的方法,可以实现
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1