技术领域
[0001] 本发明涉及计算机领域,具体涉及一种数据抽取方法和数据抽取系统。
相关背景技术
[0002] 目前公司的大数据系统存储高达几亿用户的各种消费信息,很多业务部门都需要从中抽取各自有用的数据,在以往由大数据部门为每个业务部门写一个专门的数据抽取程序,然后部署在集群上,如图1所示,在数据抽取集群上,分别部署着针对A业务、B业务和C业务的数据抽取程序,这些数据抽取程序分别从Hadoop集群上抽取数据加工后输出到指定的数据库。随时公司业务的增加,业务部门的扩展,导致集群中有几百个的数据抽取程序在同时运行,对应的代码也高达几百份,非常不利于管理。
具体实施方式
[0035] 以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
[0036] 附图中的流程图、框图图示了本发明实施例的系统、方法、装置的可能的体系框架、功能和操作,流程图和框图上的方框可以代表一个模块、程序段或仅仅是一段代码,所述模块、程序段和代码都是用来实现规定逻辑功能的可执行指令。也应当注意,所述实现规定逻辑功能的可执行指令可以重新组合,从而生成新的模块和程序段。因此附图的方框以及方框顺序只是用来更好的图示实施例的过程和步骤,而不应以此作为对发明本身的限制。
[0037] 本发明的核心思想是从数据抽取程序中尽量抽取出公用、稳定的功能做成通用模块,该通用模块包括从hadoop抽取数据、向业务插件提供公共的抽象接口、调用业务插件等功能;将和业务相关的功能做成插件,基于通用模块提供的抽象接口构建插件。通用模块获取到插件之后,为每个插件构建一个定时启动的子服务,该子服务完成一个业务数据抽取功能。
[0038] 图2是根据本发明实施例的数据抽取方法的流程图。该数据抽取方法包括以下步骤。
[0039] 在步骤201中,获取插件ID列表。
[0040] 插件是一种遵循一定规范的应用程序接口编写出来的程序。其只能运行在程序规定的系统平台下,而不能脱离指定的平台单独运行。本发明实施例中的插件由业务部门基于大数据部门提供的接口规范,根据自身的需求开发。插件ID作为每个插件的唯一标识。插件ID构成插件ID列表,插件ID列表可以以数据库表、队列、链表或对象数组等数据结构进行存储。进一步地,在获取到这些插件ID列表后,可以根据插件ID检索插件的状态,例如插件现在是处于启用状态还是处于未启用状态,则获取插件ID列表为只获取未启动状态的插件ID列表。
[0041] 在步骤202中,根据插件ID列表获取每个插件。
[0042] 通过插件ID列表获取每个对应的插件,即获取每个插件对应的可执行的代码、中间代码、源代码以及相应的配置信息等。
[0043] 在步骤203中,为每个插件构建一个数据抽取子服务,数据抽取子服务用于从数据源获取预设数据,并调用插件处理预设数据。
[0044] 在步骤204中,定时启动数据抽取子服务。
[0045] 在步骤203中,将前述的通用模块和本步骤中的插件组合起来,对应每个插件生成一个服务抽取程序,该服务抽取程序完成数据的获取、加工和输出。由于每个插件的数据加工方式、数据输出方式并不相同,因此生成的数据抽取子服务的具体功能不同,从而适应不同业务部门的需求。每个数据抽取子服务被设定为在固定时间点启动,进而通过步骤204,在固定时间点启动设定的数据抽取子服务。当数据抽取子服务被启动后,以进程或线程形式存在。
[0046] 在本发明实施例,将背景技术中的数据抽取程序改为插件,在数据抽取服务启动后,根据一个个插件生成数据抽取子服务,通过数据抽取服务集中管理和调度这些数据抽取子服务,解决了多个数据抽取程序各种独立,和业务代码高度耦合、不容易变更、非柔性化、难以管理的问题。另外,在本发明实施例中,不需要管理数据抽取子服务的代码,只需要管理通用模块的代码和插件代码,进而减少了代码总量,降低了运维压力。
[0047] 在优选的实施例中,数据抽取方法还包括对插件的集中组织和管理,通过插件ID区分每个插件。例如,可以将每个插件对应的可执行的代码、中间代码、源代码以及配置信息等通过版本管理系统存储和管理。
[0048] 图3是根据本发明实施例的数据抽取系统的结构图。数据抽取系统包括数据抽取子系统301和插件管理子系统302。
[0049] 数据抽取子系统301用于从插件管理子系统获取插件ID列表,并根据插件ID列表从插件管理子系统中获取每个插件,为每个插件构建一个数据抽取子服务,并定时启动数据抽取子服务,其中,所述数据抽取子服务用于从数据源获取预设数据,并调用所述插件处理预设数据。
[0050] 插件管理子系统302用于集中管理每个插件,并通过插件ID区分每个插件。插件管理子系统302接收数据抽取子系统301的插件请求,并将插件数据返回给数据抽取子系统301。插件数据库3021可以包含关系型数据库和文件型数据库。通过关系型数据库的库表存储插件ID,通过文件型数据库存储插件的各种代码和配置信息。进而,数据抽取子系统301可以直接访问关系型数据库的库表获得插件ID列表。
[0051] 图4a是根据本发明实施例的插件管理子系统的界面示意图。参考图4a,业务部门的用户通过界面上的“新增”按钮可以提交一个新的插件(即插件注册),并获得该插件的插件ID。进而通过“运行”、“配置”、“删除”按钮分别完成插件手工运行、插件配置和插件删除。而同时插件管理子系统的后台程序将插件的各种代码和配置信息上载到插件数据库3021进行存储、管理。
[0052] 在进一步的实施例中,插件注册模块包括插件校验单元,按照预设的接口定义对插件进行校验。如前所述,插件需和通用模块生成数据抽取子服务,因此预先定义了每个插件的接口形式,在注册时,对提交上的插件进行检查,以确定满足接口定义。通过插件校验能够避免数据抽取子服务调用插件失败。
[0053] 在进一步的实施例中,上述的数据抽取系统还包括插件监控子系统,用于采集每个数据抽取子服务中的插件运行信息,并通过图形界面显示。图4b-4c是根据本发明实施例的插件监控子系统的界面示意图。在图4b中,通过列表显示每个插件的运行状态。在图4c中,通过列表显示每个插件的平均耗时。当然,图4b和4c只是两个示例性的监控界面,本领域的技术人员也可以采用其他形式的界面示出插件的运行状态的。
[0054] 图5是根据本发明实施例的数据抽取系统的集群部署图。参考图5,Hadoop集群50作为大数据存储系统,存储有公司内部的高达几亿用户的各种消费数据。根据本发明实施例的数据抽取子系统301部署在数据抽取集群51,插件管理子系统302部署在插件管理集群52上,业务数据存储集群53是各个业务部门的数据存储集群。
[0055] 数据抽取子系统301启动后,从插件管理集群52获取插件ID列表,并进而获取每个插件,并根据插件生成数据抽取子服务,并将数据抽取子服务分发到集群中的不同服务器上运行。例如,将业务A对应的数据抽取子服务分发到服务器511上运行,将业务B对应的数据抽取子服务分发到服务器512上运行,将业务C对应的数据抽取子服务分发到服务器513上运行,从而完成数据抽取的集中管理和调度。每个数据抽取子服务由插件和通用模块生成,因此不需存储和维护每个数据抽取子服务对应的代码和可执行程序。如果对应的插件代码变化,则重新生成数据抽取子服务。数据抽取子系统301也会定时检查是否有新插件加入,若是有,则会在运行时根据插件ID从插件管理子系统群下载该插件。
[0056] 各个业务部门根据自身的业务需求开发插件,每个插件具有设定的的接口规范,每个插件可以按不同方式进行数据加工、清洗、输出等。例如,A插件将数据输出到REDIS数据库、B插件将数据输出到关系型数据库、C插件将数据输出到消息队列。
[0057] 各个业务部门进而通过插件管理子系统302将新的插件上载到插件管理集群52上,后续继续通过插件管理子系统302对本部门的插件进行维护,从而完成了插件的集中管理和存储。
[0058] 在上述的部署图上,还可以增加一个监控集群,用于部署插件监控子系统。插件监控子系统用于采集插件的运行信息,并通过图形界面加以显示。
[0059] 上述以集群部署为例进一步介绍了数据抽取系统,但实际上,用户可以根据自身需求将数据抽取系统部署到一台或多台普通的服务器上。集群部署适用于大数据的存储和处理。对中小型公司,基本上通过服务器部署即可满足需求。
[0060] 本发明实施例带来的有益效果包括以下两个方面:
[0061] 第一,将通用模块和具体的业务分开,大数据研发部门不再需要关注具体的业务,也不要过多沉浸到复杂的流程中。灵活多变的业务,交给业务开发人来开发,然后由专门的系统来管理它们,不需要太多的人工干预,管理成本减少;
[0062] 第二,可以有效的管理这些插件,可以图形化的看目前各个插件的运行情况,更可以详细查看各个插件的基本性能指标。
[0063] 本发明实施例中的插件的监控和性能可视化,既可以自己实现,也可以借助开源的软件来展示。
[0064] 该数据抽取系统的各个模块或单元可以通过硬件、固件或软件实现。软件例如包括采用JAVA、C/C++/C#、SQL等各种编程语言形成的编码程序。虽然在方法以及方法图例中给出本发明实施例的步骤以及步骤的顺序,但是所述步骤实现规定的逻辑功能的可执行指令可以重新组合,从而生成新的步骤。所述步骤的顺序也不应该仅仅局限于所述方法以及方法图例中的步骤顺序,可以根据功能的需要随时进行调整。例如将其中的某些步骤并行或按照相反顺序执行。
[0065] 根据本发明的系统和方法可以部署在单个或多个服务器上。例如,可以将不同的模块分别部署在不同的服务器上,形成专用服务器。或者,可以在多个服务器上分布式部署相同的功能单元、模块或系统,以减轻负载压力。所述服务器包括但不限于在同一个局域网以及通过Internet连接的多个PC机、PC服务器、刀片机、超级计算机等。
[0066] 以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。