一种分布式海量数据聚合采集方法与流程

文档序号:14519253阅读:2674来源:国知局

本发明涉及数据采集领域,尤其涉及一种分布式海量数据聚合采集方法。



背景技术:

在云计算时代,面对海量数据,传统的etl(extraction-transformation-loading)工具显然力不从心,主要是数据转换开销太大,在性能上无法满足海量数据的采集需求。为了提高海量数据采集的性能,目前已经产生了各种成熟并且效果非常好的海量数据采集组件,比如常用的apache基金会的开源flume组件。flume是一个分布式、可靠和高可用的海量数据聚合系统。支持在系统中采集不同类型数据源的数据,同时,支持对数据进行简单处理,并将其下沉到不同数据接收方。

现有将数据下沉到solr的下沉组件是flume-ng-morphline-solr-sink组件,它依赖于morphlineetl工具,即它基于morphline的配置项十分复杂,增加了使用者的负担,并且它没有提供对具有相同uniquekey记录的合并操作,尤其是针对solr集合中记录局部字段更新,包括多值字段的值去重累计聚合支撑不足,从而增加了solrcloud集群的压力。



技术实现要素:

为了克服上述现有技术中的不足,本发明提供一种分布式海量数据聚合采集方法,方法包括:

步骤一,基于solrcloud集群实现继承自abstractsink抽象类和configurable接口的solrsink类;

步骤二,定义flume-solr-sink组件sink类型参数的值为solr;

步骤三,solrsink类的configurable接口通过configure(contextcontext)模块读取有关solrcloud的相关配置参数;

步骤四,solrsink类覆盖实现abstractsink类的start()方法,通过读取solrcloud在zookeeper集群中collectionschema相应的znode节点数据,同时在znode注册一个solrschemawatcher类的实例对象,来解析collection的schema信息,获取需要的uniquekey和多值字段的信息;

步骤五,基于solrsink类的抽象类abstractsink的process()模块,通过process()模块循环处理接收到的数据单元,将接收到的数据单元按照solrcloudcollection中相应的字段定义到solrinputdocument类对象实例中;

步骤六,针对数据源中的不同数据格式,基于solrcloud集群定义abstractparser抽象类,将text格式数据、json格式数据、avro格式数据、protobuf格式数据均转换为solrcloudcollection的schema中定义的类型。

优选地,步骤三还包括,solrcloud在zookeeper集群中的注册znode节点,集合名称,写入字段,是否启用聚合功能,以及批量写入solrcloud的阈值。

优选地,步骤五还包括,按照预设批次将接收到的数据单元按照solrcloudcollection中相应的字段定义追加到solrinputdocument类对象实例中;

如某一批次接收到的数据单元出现异常时,按照异常事务处理,将接收到的异常数据单元定义到异常solrinputdocument类对象实例中。

优选地,步骤一之前还包括:

在系统中安装部署solrcloud集群;

将flume-solr-sink数据下沉组件的jar包分发到flume的每个节点机器的类加载路径;

配置数据采集的sink的type为solr。

优选地,步骤配置数据采集的sink的type为solr之后,启动所有flume组件的agent进程,使用分布式海量数据聚合采集方式进行数据采集。

优选地,步骤一之前还包括:

在系统中安装部署zookeeper集群。

从以上技术方案可以看出,本发明具有以下优点:

本发明采用solrcloud分布式全文检索系统作为flumesink子组件的目标存储,设计了flume-solr-sink数据下沉组件。通过利用对相应znode节点注册watcher的方法实现了近实时读取collection的schema信息,减少了一些冗余的配置项,实现了不需要重启flumeagent即可获取最新的schema配置信息;通过继承实现abstractparser类的方式支持解析json、text、avro以及protobuf等格式的数据;通过在组件中分批次聚合数据单元(包含多值字段的值累计聚合),减少了发送到solrcloud集群的数据量,提升了数据写入的效率,提升了flume数据采集的性能。

附图说明

为了更清楚地说明本发明的技术方案,下面将对描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为分布式海量数据聚合采集方法流程图。

具体实施方式

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将运用具体的实施例及附图,对本发明保护的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本专利中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本专利保护的范围。

本实施例提供一种分布式海量数据聚合采集方法,如图1所示,方法包括:

s1,基于solrcloud集群实现继承自abstractsink抽象类和configurable接口的solrsink类;

s2,定义flume-solr-sink组件sink类型参数的值为solr;

s3,solrsink类的configurable接口通过configure(contextcontext)模块读取有关solrcloud的相关配置参数;

s4,solrsink类覆盖实现abstractsink类的start()方法,通过读取solrcloud在zookeeper集群中collectionschema相应的znode节点数据,同时在znode注册一个solrschemawatcher类的实例对象,来解析collection的schema信息,获取需要的uniquekey和多值字段的信息;

s5,基于solrsink类的抽象类abstractsink的process()模块,通过process()模块循环处理接收到的数据单元,将接收到的数据单元按照solrcloudcollection中相应的字段定义到solrinputdocument类对象实例中;

s6,针对数据源中的不同数据格式,基于solrcloud集群定义abstractparser抽象类,将text格式数据、json格式数据、avro格式数据、protobuf格式数据均转换为solrcloudcollection的schema中定义的类型。solrsink在将数据单元写入solrcloudcollection之前会依赖所述的转换类转化数据类型。

本实施例中,步骤三还包括,solrcloud在zookeeper集群中的注册znode节点,集合名称,写入字段,是否启用聚合功能,以及批量写入solrcloud的阈值。

本实施例中,步骤五还包括,按照预设批次将接收到的数据单元按照solrcloudcollection中相应的字段定义追加到solrinputdocument类对象实例中;

如某一批次接收到的数据单元出现异常时,按照异常事务处理,将接收到的异常数据单元定义到异常solrinputdocument类对象实例中。

本实施例中,步骤一之前还包括:

在系统中安装部署solrcloud集群;

将flume-solr-sink数据下沉组件的jar包分发到flume的每个节点机器的类加载路径;

配置数据采集的sink的type为solr。

本实施例中,步骤配置数据采集的sink的type为solr之后,启动所有flume组件的agent进程,使用分布式海量数据聚合采集方式进行数据采集。

本实施例中,步骤一之前还包括:在系统中安装部署zookeeper集群。

通过自定义的solr-sink组件,解析json、text、avro、protobuf等格式的源数据,分批次写入solrcloud的collection中;提供了近实时读取solrcloud在zookeeper集群相应collectionschema的znode节点数据,解析获取我们需要的uniquekey字段以及多值字段等schema信息;并且支持将每个批次中的数据进行汇总聚合(包括多值字段的去重累计聚合)功能。其次我们设计的自定义solr-sink组件相对于flume-ng-morphlie-solr-sink的配置项简便易用,提高了研发人员配置的效率。

采用solrcloud分布式全文检索系统作为flumesink子组件的目标存储,设计了flume-solr-sink数据下沉组件。由于solrcloud集群的节点和collection等配置信息使用的zookeeper集群保存的特性,通过利用对相应znode节点注册watcher的方法实现了近实时读取collection的schema信息,减少了一些冗余的配置项,实现了不需要重启flumeagent即可获取最新的schema配置信息;通过继承实现abstractparser类的方式支持解析json、text、avro以及protobuf等格式的数据;通过在组件中分批次聚合单条event数据(包含多值字段的值累计聚合),减少了发送到solrcloud集群的数据量,提升了数据写入的效率,提升了flume数据采集的性能。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1