1.本发明涉及大数据
技术领域:
:,尤其涉及一种数据检索方法及装置。
背景技术:
::2.近几年来,随着数据搜索的广泛应用,elasticsearch社区的活跃程度不断加大,elasticsearch得到了很大的发展空间,其角色定位已经不是最初的纯搜索引擎了,最初时包括大量的用户仅仅将其作为日志的搜索引擎。现在elasticsearch已经增加了数据聚合分析(aggregation)和可视化的特性,针对其产生的应用也会越来越广泛。3.hbase是一个开源的非关系型分布式数据库,它参考了谷歌的bigtable建模,实现的编程语言为java。它是apache软件基金会的hadoop项目的一部分,运行于hdfs文件系统之上,为hadoop提供类似于bigtable规模的服务。因此,它可以容错地存储海量稀疏的数据。hbase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌bigtable的开源实现,主要用来存储非结构化和半结构化的松散数据。hbase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表。4.hbase查询可以分为两种,分别是基于rowkey的查询和基于filter的过滤查询。然而这两种查询方法都有其局限性,对于rowkey查询,能快速响应查询请求,查询条件不够灵活;而对于filter查询,目前支持dependentcolumnfilter,familyfilter,qualifierfilter,rowfilter,valuefilter等过滤器,其查询性能不高,尤其是对于全表扫描,随着数据量的增大其查询效率逐渐降低。技术实现要素:5.本发明提供一种数据检索方法及装置,用以解决现有技术中无法高效快速查询海量数据的缺陷,实现对海量数据的快速查询。6.本发明提供一种数据检索方法,包括:7.基于采集的目标数据,确定目标hbase数据表;8.基于所述目标hbase数据表,确定所述目标hbase数据表的elasticsearch索引表;9.基于所述elasticsearch索引表,进行数据检索。10.在一些实施例中,所述基于采集的目标数据,确定目标hbase数据表,包括:11.基于目标数据的标识信息,确定所述目标hbase数据表的行键;所述标识信息包括:记录的时间和关键字段;12.基于所述行键,确定所述目标hbase数据表的数据行;13.基于所述行键和所述数据行,确定目标hbase数据表。14.在一些实施例中,所述基于所述目标hbase数据表,确定所述目标hbase数据表的elasticsearch索引表,包括:15.基于所述目标hbase数据表的行键,确定所述elasticsearch索引表的索引键;16.基于目标hbase数据表的字段,确定所述elasticsearch索引表的数据行;17.基于所述索引键和所述elasticsearch索引表的数据行,确定所述elasticsearch索引表。18.在一些实施例中,所述基于所述目标hbase数据表的行键,确定所述elasticsearch索引表的索引键,包括:19.基于所述目标hbase数据表的行键、分区起始键、索引id、索引值的长度、索引值和最大值的时间戳,确定所述elasticsearch索引表的索引键。20.在一些实施例中,所述基于所述elasticsearch索引表,进行数据检索,包括:21.基于查询条件,遍历所述elasticsearch索引表中的数据行,确定满足所述查询条件的索引键;22.基于所述满足所述查询条件的索引键,确定与所述满足所述查询条件的索引键关联的行键;23.基于所述关联的行键,在所述目标hbase数据表中进行数据检索。24.在一些实施例中,所述基于采集的目标数据,确定目标hbase数据表之前,还包括:25.按批次去kafka队列抽取数据,并过滤,获取指定格式的数据集;26.对所述数据集中的数据进行解析,获取原始数据;27.对所述原始数据进行清洗;28.基于预设hbase数据表结构,在清洗后的数据中抽取相应记录,确定目标数据。29.本发明还提供一种数据检索装置,包括:30.第一确定模块,用于基于采集的目标数据,确定目标hbase数据表;31.第二确定模块,用于基于所述目标hbase数据表,确定所述目标hbase数据表的elasticsearch索引表;32.检索模块,用于基于所述elasticsearch索引表,进行数据检索。33.本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述数据检索方法。34.本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述数据检索方法。35.本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述数据检索方法。36.本发明提供的数据检索方法及装置,通过根据不同的数据源建立目标hbase数据表,针对目标hbase数据表建立对应的elasticsearch索引表,通过使目标hbase数据表的行键与elasticsearch索引表的索引键一一对应,将目标hbase数据表与elasticsearch索引表关联起来,丰富查询api,提高了查询效率,从而实现对海量数据的快速查询。附图说明37.为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。38.图1是本发明提供的数据检索方法的流程示意图;39.图2是本发明提供的数据检索系统的结构示意图;40.图3是应用本发明提供的数据检索系统的流程示意图之一;41.图4是应用本发明提供的数据检索系统的流程示意图之二;42.图5是应用本发明提供的数据检索系统的流程示意图之三;43.图6是应用本发明提供的数据检索系统的流程示意图之四;44.图7是本发明提供的数据检索装置的结构示意图;45.图8是本发明提供的电子设备的结构示意图。具体实施方式46.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。47.图1是本发明提供的数据检索方法的流程示意图,参考图1,本发明提供的数据检索方法,可以包括:48.步骤110、基于采集的目标数据,确定目标hbase数据表;49.步骤120、基于目标hbase数据表,确定目标hbase数据表的elasticsearch索引表;50.步骤130、基于elasticsearch索引表,进行数据检索。51.需要说明的是,本发明提供的数据检索方法的执行主体可以是电子设备、电子设备中的部件、集成电路、或芯片。该电子设备可以是移动电子设备,也可以为非移动电子设备。示例性的,移动电子设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载电子设备、可穿戴设备、超级移动个人计算机(ultra-mobilepersonalcomputer,umpc)、上网本或者个人数字助理(personaldigitalassistant,pda)等,非移动电子设备可以为服务器、网络附属存储器(networkattachedstorage,nas)、个人计算机(personalcomputer,pc)、电视机(television,tv)、柜员机或者自助机等,本发明不作具体限定。52.在步骤110中,基于采集的目标数据,确定目标hbase数据表。53.可以采用流式抽取数据的方式进行数据采集,采集的目标数据可以是不同的数据源。按照预设hbase数据表的结构,根据不同的数据源建立相应的目标hbase数据表datatable。54.hbase是一个分布式的、面向列的数据库,它和一般关系型数据库的最大区别是:hbase很适合于存储非结构化的数据,它基于列而不是基于行的模式。hbase是采用键值对keyvalue的列存储,行键rowkey就是keyvalue的键key了,表示唯一一行。rowkey是一段二进制码流,最大长度为64kb,内容可以由使用的用户自定义。数据加载时,一般也是根据rowkey的二进制序由小到大进行的。55.在步骤120中,基于目标hbase数据表,确定目标hbase数据表的elasticsearch索引表。56.根据目标hbase数据表,建立相应的elasticsearch索引表indextable。57.例如,可以通过设计目标hbase数据表的region与相应的elasticsearch索引表有相同的起始键,并通过控制行键的设计方式保证相同数据源的目标hbase数据表的region一一对应且存储在同一个regionserver上,从而在查询时减少一次rpc调用。并通过使目标hbase数据表的行键与elasticsearch索引表的索引键一一对应,丰富查询api,提高查询效率。58.在步骤130中,基于elasticsearch索引表,进行数据检索。59.hbase根据rowkey来进行检索时,系统通过找到某个rowkey(或者某个rowkey范围)所在的region,然后将查询数据的请求路由到该region获取数据。hbase的检索通过单个rowkey访问时,按照某个rowkey键值进行get操作,这样获取唯一一条记录;通过rowkey的range进行扫描时,通过设置startrowkey和endrowkey,在这个范围内进行扫描。这样可以按指定的条件获取一批记录。60.根据输入的查询条件,遍历、筛选elasticsearch索引表的数据行,找到满足查询条件的索引键。根据该索引键,关联出目标hbase数据表中的行键。根据该行键查询目标hbase数据表中的数据,得到查询数据。61.本发明实施例提供的数据检索方法,通过根据不同的数据源建立目标hbase数据表,针对目标hbase数据表建立对应的elasticsearch索引表,通过使目标hbase数据表的行键与elasticsearch索引表的索引键一一对应,将目标hbase数据表与elasticsearch索引表关联起来,丰富查询api,提高了查询效率,从而实现对海量数据的快速查询。62.在一些实施例中,基于采集的目标数据,确定目标hbase数据表,包括:63.基于目标数据的标识信息,确定目标hbase数据表的行键;标识信息包括:记录的时间和关键字段;64.基于行键,确定目标hbase数据表的数据行;65.基于行键和数据行,确定目标hbase数据表。66.获取预设的hbase数据表region的startkey;获取目标数据中每条记录的时间,将时间转换为时间戳;获取记录的由关键字段拼接成的唯一标识;将以上信息拼接得到目标hbase数据表的行键。67.根据目标hbase数据表的行键,创建目标hbase数据表的数据行,自定义时间戳为上一步获得的时间戳,根据预设的hbase数据表结构来填充数据,得到目标hbase数据表。68.本发明实施例提供的数据检索方法,通过使用hbase分布式数据库,hdfs作为文件系统,可以解决磁盘扩展问题。69.在一些实施例中,基于目标hbase数据表,确定目标hbase数据表的elasticsearch索引表,包括:70.基于目标hbase数据表的行键,确定elasticsearch索引表的索引键;71.基于目标hbase数据表的字段,确定elasticsearch索引表的数据行;72.基于索引键和elasticsearch索引表的数据行,确定elasticsearch索引表。73.根据目标hbase数据表的行键信息,创建分区表的索引表的索引键,使得每个索引表的索引键与目标hbase数据表的行键一一对应。74.在一些实施例中,基于目标hbase数据表的行键,确定elasticsearch索引表的索引键,包括:75.基于目标hbase数据表的行键、分区起始键、索引id、索引值的长度、索引值和最大值的时间戳,确定elasticsearch索引表的索引键。76.在单列索引的情况下,索引键的组成部分依次是分区起始键regionstartkey、索引idindex_id、索引值的长度indexvalue_length、索引值indexvalue、最大值的时间戳max_value-timestamp、目标hbase数据表的行键datatablerowkey。77.如果是多列索引,elasticsearch索引表中的索引值由这些列值拼接得到。78.在目标hbase数据表的字段中抽取部分需要索引的字段创建elasticsearch索引表的数据行,从而构建elasticsearch索引表。79.本发明实施例提供的数据检索方法,通过基于目标hbase数据表的行键,确定elasticsearch索引表的索引键,根据该行键按照特定组合得到索引键,该组合可以保证索引键的开始段是目标hbase数据表region的起始键,索引键与行键一一对应,从而在目标hbase数据表和elasticsearch索引表之间建立关联依据,实现对海量数据的快速查询。80.在一些实施例中,基于elasticsearch索引表,进行数据检索,包括:81.基于查询条件,遍历elasticsearch索引表中的数据行,确定满足查询条件的索引键;82.基于满足查询条件的索引键,确定与满足查询条件的索引键关联的行键;83.基于关联的行键,在目标hbase数据表中进行数据检索。84.首先根据输入的查询条件,遍历、筛选elasticsearch索引表的数据行。遍历满足查询条件的elasticsearch索引表中所有的数据行,找出所有满足查询条件的索引键。85.根据满足查询条件的索引键,关联出目标hbase数据表中的行键。86.根据该行键查询目标hbase数据表中的数据,得到查询结果,并返回数据。87.本发明实施例提供的数据检索方法,通过针对目标hbase数据表建立对应的elasticsearch索引表,行键与索引键一一对应,根据查询条件遍历elasticsearch索引表的数据行,找出所有满足查询条件的索引键,根据索引键关联出行键,根据该行键查询目标hbase数据表得到查询数据,从而为基于hbase的海量数据处理提供技术支持,进一步实现对海量数据的快速查询。88.在一些实施例中,基于采集的目标数据,确定目标hbase数据表之前,还包括:89.按批次去kafka队列抽取数据,并过滤,获取指定格式的数据集;90.对数据集中的数据进行解析,获取原始数据;91.对原始数据进行清洗;92.基于预设hbase数据表结构,在清洗后的数据中抽取相应记录,确定目标数据。93.首先,实时通过spark-streaming的方式流式抽取kafka队列中的数据,并过滤,得到指定格式的数据集。sparkstreaming是spark核心api的一个扩展,可以实现高吞吐量的、具备容错机制的实时流数据的处理。sparkstreaming支持从多种数据源获取数据,包括:kafka、flume、twitter、zeromq、kinesis以及tcpsockets。从数据源获取数据之后,可以使用诸如map、reduce、join和window等高级函数进行复杂算法的处理,最后还可以将处理结果存储到文件系统、数据库和现场仪表盘中。94.根据预设的数据集解析规则,遍历数据集,遍历指定目录,并保留匹配规则的文件。判断数据格式,数据格式分为字段之间用指定分隔符分割的结构化数据和json格式数据。对固定格式的数据采用固定分隔符解析获得原始数据,对特定格式的数据采用特定方式解析获得原始数据。95.对原始数据进行清洗,过滤缺失关键字段或者时间戳大于当前时间的记录。96.检查清洗过后的数据中的记录字段个数是否符合要求,然后根据目标hbase表抽取相应记录,得到目标数据。97.本发明实施例提供的数据检索方法,通过对抽取的流式数据进行数据解析、数据清洗、数据抽取、数据转换等处理后,筛选、检测和纠正了数据集、表或数据库中的不准确或损坏的记录,得到准确的目标数据。98.图2是本发明实施例提供的数据检索系统,图3至图6是应用本发明提供的数据检索系统的流程示意图之一至之四。99.参考图2,本发明实施例提供的数据检索系统可以包括:流式数据抽取模块、数据解析模块、数据清洗模块、etl模块、hbasedatatablerow创建模块、elasticsearchindextable创建模块、hbase写入模块、elasticsearch写入模块、hbase集群、elasticsearch集群和数据检索模块。100.其中,流式数据抽取模块、数据解析模块、数据清洗模块、etl模块、hbasedatatablerow创建模块、hbase写入模块和hbase集群依次顺序连接;101.etl模块、elasticsearchindextable创建模块、elasticsearch写入模块和elasticsearch集群依次顺序连接;102.hbase集群和elasticsearch集群均连接至数据检索模块。103.流式数据抽取模块,用于按批次去kafka队列抽取数据并过滤,获取指定格式的数据集。104.数据解析模块,用于对数据集中的数据进行解析,获取原始数据。105.数据解析模块的具体工作流程如图3所示:106.s1、开始,模块开始初始化,提供数据集解析规则;107.s2、遍历数据集,遍历指定目录,并保留匹配规则的文件;108.s3、判断数据格式,数据格式分为字段之间用指定分隔符分割的结构化数据和json格式数据;109.s4.1、固定格式数据解析,对固定格式的数据采用固定分隔符解析获得原始数据;110.s4.2、特定格式数据解析,对特定格式的数据采用特定方式解析获得原始数据。111.数据清洗模块,用于清洗并过滤缺失关键字段或者时间戳大于当前时间的记录。112.etl模块,用于检查记录字段个数是否符合要求,然后根据预设hbase表抽取相应记录。113.hbasedatatablerow创建模块,用于创建hbasedatatable。114.hbasedatatablerow创建模块的具体工作流程如图4所示:115.s1、开始,启动该模块,提供相应datatable的表结构信息;116.s2、创建datatablerowkey,获取表region的startkey,获取记录的时间,将时间转换为时间戳,获取记录的由关键字段拼接成的唯一标识,将以上信息拼接得到datatablerow-key;117.s3、创建datatablerow,利用s2获取的datatablerowkey创建datatablerow,自定义时间戳为s2获得的时间戳,根据datatable表结构填充数据。118.elasticsearchindextable创建模块,用于创建elasticsearchindextable。119.elasticsearchindextable创建模块的具体工作流程如图5所示:120.s1、开始,启动该模块,获取相应indextable的表结构信息;121.s2、获取datatableregion的rowkey,获取datatable的rowkey信息;122.s3、创建indextablekeys,根据datatableregion的rowkey信息创建分区表的indextable,使得每个indextable的key与datatable的rowkey对应。如果是单列索引,该key的组成部分依次是regionstartkey、index_id、indexvalue_length、indexvalue、max_value-timestamp、datatablerowkey。如果是多列索引,indexvalue由这些列值拼接得到;123.s4、创建indextablerows,从datatable的字段中抽取部分需要索引的字段创建indextablerows。124.hbase写入模块,用于批量写入hbase,并设置批次大小。125.elasticsearch写入模块,用于批量写入elasticsearch,并设置批次大小。126.数据检索模块,用于快速检索在hbase集群和elasticsearch集群中的数据。其中的数据满足indextablekey与datatable的rowkey一一对应。127.数据检索模块的具体工作流程如图6所示:128.s1、开始,模块初始化。输入查询条件;129.s2、遍历、筛选indextable中的row,确定查询条件后,遍历满足查询条件的indextable中所有的行,找出所有满足查询条件的key;130.s3、查找datatable中的row,根据s2得到的key关联出datatable中的rowkey,得到datatable中的数据;131.s4、返回数据,构建需要返回的数据实体,返回数据。132.本发明实施例提供的数据检索系统,通过使用hbase分布式数据库,hdfs作为文件系统,解决了磁盘扩展问题;通过使用二级索引,检索速度快;datatablerowkey与indextablekey一一对应,丰富查询api,提高了查询效率,能够对移动互联网海量数据处理和查询提供有效的技术支持,实现对海量数据的快速查询。133.下面对本发明提供的数据检索装置进行描述,下文描述的数据检索装置与上文描述的数据检索方法可相互对应参照。134.图7是本发明提供的数据检索装置的结构示意图,参照图7,本发明提供的数据检索装置,可以包括:135.第一确定模块710,用于基于采集的目标数据,确定目标hbase数据表;136.第二确定模块720,用于基于目标hbase数据表,确定目标hbase数据表的elasticsearch索引表;137.检索模块730,用于基于elasticsearch索引表,进行数据检索。138.本发明实施例提供的数据检索装置,通过根据不同的数据源建立目标hbase数据表,针对目标hbase数据表建立对应的elasticsearch索引表,通过使目标hbase数据表的行键与elasticsearch索引表的索引键一一对应,将目标hbase数据表与elasticsearch索引表关联起来,丰富查询api,提高了查询效率,从而实现对海量数据的快速查询。139.在一些实施例中,第一确定模块710具体用于:140.基于目标数据的标识信息,确定目标hbase数据表的行键;标识信息包括:记录的时间和关键字段;141.基于行键,确定目标hbase数据表的数据行;142.基于行键和数据行,确定目标hbase数据表。143.在一些实施例中,第二确定模块720具体用于:144.基于目标hbase数据表的行键,确定elasticsearch索引表的索引键;145.基于目标hbase数据表的字段,确定elasticsearch索引表的数据行;146.基于索引键和elasticsearch索引表的数据行,确定elasticsearch索引表。147.在一些实施例中,基于目标hbase数据表的行键,确定elasticsearch索引表的索引键,包括:148.基于目标hbase数据表的行键、分区起始键、索引id、索引值的长度、索引值和最大值的时间戳,确定elasticsearch索引表的索引键。149.在一些实施例中,检索模块730具体用于:150.基于查询条件,遍历elasticsearch索引表中的数据行,确定满足查询条件的索引键;151.基于满足查询条件的索引键,确定与满足查询条件的索引键关联的行键;152.基于关联的行键,在目标hbase数据表中进行数据检索。153.在一些实施例中,基于采集的目标数据,确定目标hbase数据表之前,还包括:154.按批次去kafka队列抽取数据,并过滤,获取指定格式的数据集;155.对数据集中的数据进行解析,获取原始数据;156.对原始数据进行清洗;157.基于预设hbase数据表结构,在清洗后的数据中抽取相应记录,确定目标数据。158.图8示例了一种电子设备的实体结构示意图,如图8所示,该电子设备可以包括:处理器(processor)810、通信接口(communicationsinterface)820、存储器(memory)830和通信总线840,其中,处理器810,通信接口820,存储器830通过通信总线840完成相互间的通信。处理器810可以调用存储器830中的逻辑指令,以执行数据检索方法,该方法包括:159.基于采集的目标数据,确定目标hbase数据表;160.基于目标hbase数据表,确定目标hbase数据表的elasticsearch索引表;161.基于elasticsearch索引表,进行数据检索。162.此外,上述的存储器830中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。163.另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的数据检索方法,该方法包括:164.基于采集的目标数据,确定目标hbase数据表;165.基于目标hbase数据表,确定目标hbase数据表的elasticsearch索引表;166.基于elasticsearch索引表,进行数据检索。167.又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的数据检索方法,该方法包括:168.基于采集的目标数据,确定目标hbase数据表;169.基于目标hbase数据表,确定目标hbase数据表的elasticsearch索引表;170.基于elasticsearch索引表,进行数据检索。171.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。172.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。173.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页12当前第1页12