CN110457279B - 数据离线扫描方法、装置、服务器及可读存储介质 - Google Patents
数据离线扫描方法、装置、服务器及可读存储介质 Download PDFInfo
- Publication number
- CN110457279B CN110457279B CN201910624528.9A CN201910624528A CN110457279B CN 110457279 B CN110457279 B CN 110457279B CN 201910624528 A CN201910624528 A CN 201910624528A CN 110457279 B CN110457279 B CN 110457279B
- Authority
- CN
- China
- Prior art keywords
- data
- target
- scanner
- scanning
- scanned
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
Abstract
本公开提供一种数据离线扫描方法、装置、服务器及可读存储介质,通过直接从列式分布式数据库的底层文件系统的目录中获取构造区域对象所需的参数,基于获取的参数构造区域对象,并通过构造的区域对象提供的扫描器接口从底层文件系统扫描所需数据。如此,在进行数据扫描时可以不必依赖列式分布式数据库的区域服务器进程,从而避免了当所需扫描的数据量较大时,因占用区域服务器进程的大量资源而导致区域服务器进程提供的其它服务响应较慢的问题。
Description
技术领域
本公开涉及大数据技术领域,具体而言,涉及一种数据离线扫描方法、装置、服务器及可读存储介质。
背景技术
相关技术中,当需要通过扫描方式读取列式分布式数据库中的数据时,通常是通过特定客户端(Client)来向该系统的服务器进程发起读请求,进而由服务器进程从系统的底层文件系统读取所需的数据。
然而,当所需扫描的数据量非常大时,服务器进程会耗费大量资源来进行数据扫描,从而影响到提供其它服务的效率。甚至,当一个用户需要扫描大量数据时,服务器进程将难以为其他用户提供服务。
发明内容
有鉴于此,本公开的目的之一在于提供一种数据离线扫描方法及装置,能够绕开服务器进程直接从列式分布式数据库的底层文件系统获取需要扫描的数据,从而避免因占用服务器进程的大量资源。
为了达到上述目的,本公开采用如下技术方案:
第一方面,本公开提供一种数据离线扫描方法,应用于服务器,所述方法包括:
接收用户端发送的扫描请求,所述扫描请求包括需要从列式分布式数据库中进行数据扫描的扫描范围;
根据所述扫描范围确定待扫描数据所属的目标数据表及所述目标数据表中存在所述待扫描数据的目标区域,并从所述列式分布式数据库的底层文件系统的目录中获取所述目标区域的存储路径和描述信息;
根据所述存储路径和所述描述信息构造与所述目标区域对应的区域对象;
通过所述区域对象的扫描器接口从所述底层文件系统中扫描得到所述待扫描数据。
第二方面,本公开还提供一种数据离线扫描装置,应用于服务器,所述装置包括:
接收模块,用于接收用户端发送的扫描请求,所述扫描请求包括需要从列式分布式数据库中进行数据扫描的扫描范围;
构造模块,用于根据所述扫描范围确定待扫描数据所属的目标数据表及所述目标数据表中存在所述待扫描数据的目标区域,并从所述列式分布式数据库的底层文件系统的目录中获取所述目标区域的存储路径和描述信息;根据所述存储路径和所述描述信息构造与所述目标区域对应的区域对象;
扫描模块,用于通过所述区域对象的扫描器接口从所述底层文件系统中扫描得到所述待扫描数据。
第三方面,本公开还提供一种服务器,该服务器包括处理器及可读存储介质,该可读存储介质存储有机器可执行指令,该机器可执行指令被执行时促使该处理器:实现本公开第一方面提供的数据离线扫描方法。
第四方面,本公开还提供一种可读存储介质,其上存储有机器可执行指令,所述机器可执行指令被执行时实现本公开第一方面提供的数据离线扫描方法。
相较于现有技术,本公开提供的一种数据离线扫描方法、装置、服务器及可读存储介质,通过直接从列式分布式数据库的底层文件系统的目录获取构造区域对象所需的参数,基于获取的参数构造区域对象,并通过构造的区域对象的扫描器接口从底层文件系统扫描所需数据,能够在不依赖列式分布式数据库的区域服务器进程的情况下实现数据扫描,避免了当所需扫描的数据量较大时,因占用区域服务器进程的大量资源而导致区域服务器进程提供的其它服务响应较慢的问题,以及因单个用户扫描大量数据而导致的区域服务器进程无法为其他用户提供服务的问题。
附图说明
为了更清楚地说明本公开的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本公开提供的一个示例中HBase集群的架构示意图;
图2为本公开提供的一种数据离线扫描方法的流程示意图;
图3为本公开提供的一个示例中HBase表的物理存储结构;
图4为本公开提供的一种键值对的数据结构示意图;
图5为图3所示数据的逻辑视图;
图6为本公开提供的一种服务器的结构示意图;
图7为本公开提供的一种数据离线扫描装置的功能模块框图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚,下面将结合本公开中的附图,对本公开中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其它实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在以下附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本实施例提供的数据离线扫描方法及装置应用于列式分布式数据库中,例如HBase、HyperTable等。下面将以列式分布式数据库是HBase为例对本实施例的方案进行阐述。
请参照图1,图1为本实施例提供的一种HBase集群的架构示意图。HBase的底层文件系统为HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)。HDFS部署在包括多个服务器的服务器集群上,每个服务器可以称为HDFS的一个数据节点。
HBase中的数据表称为HBase表,HBase表是行(row)的集合,行是列族(columnfamily,cf)的集合。其中,每一行由唯一的行键(rowkey)来进行标识。在一个HBase表中,rowkey是唯一的。一个HBase表按照rowkey的范围可以划分为多个区域(Region),即从行的方向上划分为多个Region。其中,一个Region可以视作HBase表的一个片段。
列族是列(column)的集合,列是键值对(keyvalue)的集合。HBase表中最基本的单位是列(column),一个列族可以进一步划分为多个单元文件,该单元文件在HBase中称为HFile文件。
HBase通常采用zookeeper来进行集群管理,在架构层面上分为Master和多个RegionServer,每个RegionServer管理有一个或多个Region对象(又表示为HRegion),每个Region对象和HDFS中的一个Region对应。其中,Master是部署在管理节点上的服务进程,RegionServer是部署在工作节点上的服务进程。为了方便管理,RegionServer通常可以部署在HDFS的数据节点上,对应地,HDFS的数据节点也是HBase的工作节点。
每个Region对象包括日志文件HLOG及多个Store,一个Store对应于HDFS中的一个列族;每个Store包括一个MemStore(位于RegionServer所在节工作节点的内存中)以及一个或多个StoreFile,其中,一个StoreFile与HDFS中的一个HFile对应,一个HFile中包括多列数据。值得说明的是,HBase的数据在HDFS中按照rowkey的字典排序(lexicographicalorder)依次存储,因此,一个HFile中的数据的rowkey是连续的,一个region中的数据的rowkey也是连续的。
HBase提供了能够与RegionServer交互的客户端(Client),当用户端需要访问HBase集群,例如,需要向HBase集群写数据或需要从HBase集群读数据时,通常需要通过该客户端来向HBase集群中的RegionServer发送相应的RPC(Remote Procedure Call,远程过程调用)请求,进而由RegionServer根据该RPC请求进行相应的数据处理。
在一些应用场景中,需要采用扫描(scan)方式从HBase集群读取大批量数据,例如需要对用户一段时间内行为数据进行分析,则需要提前读取用户在该段时间内的全部行为数据。若通过客户端向RegionServer发送RPC请求的方式来实现大批量数据的扫描,则会导致RegionServer的有限资源被大量占用,从而影响到RegionServer提供其它服务的效率。更进一步地,在实际应用中,许多用户都存在扫描大批量数据的需求,当某一个或某几个用户采用前述方式从HBase集群扫描大批量数据时,HBase集群中RegionServer的处理资源将被这些用户占用,从而难以为其他用户提供服务。
此外,在HBase集群中,一次大批量数据的扫描会被拆分成多个RPC请求发送给RegionServer,使RegionServer进行相应的扫描操作。HBase提供了对客户端发送的RPC请求的超时时长的设置功能,比如通过hbase.client.scanner.timeout.period这一参数进行设置。如果超过该超时时长没有收到响应,则产生异常。为了避免资源占用,该响应时长不会过大,而在大批量数据扫描过程中,很容易因为网络传输原因、RegionServer的处理速度等导致超时异常,进而无法扫描到所需数据。
为了至少部分地改善上述问题,本公开提供一种数据离线扫描方法及装置,具体描述如下。
请参照图2,图2是本公开提供的一种数据离线扫描方法的流程示意图,该方法可以应用于服务器。所述服务器可以是上文描述的HDFS的数据节点,也可以是能够与部署HDFS的服务器集群通信的服务器,本实施例对此没有限制。
步骤S21,接收用户端发送的扫描请求,所述扫描请求包括需要从列式分布式数据库中进行数据扫描的扫描范围。
以HBase集群为例,扫描请求可以通过需要扫描的数据(后称“待扫描数据”)所属的HBase表(后称“目标数据表”)以及待扫描数据的rowkey的范围等来限定所述扫描范围,其中rowkey的范围可以通过起始值(startkey)和结束值(endkey)来确定。特别地,如果扫描请求中未指定startkey和endkey,则默认对目标数据表进行全表扫描,即扫描范围是整张目标数据表。
当然,除了上述内容,扫描请求还可以携带有其它对扫描范围进行限定的信息。比如,还可以扫描请求还可以携带有待扫描数据的时间戳(timestamp)范围、版本(version)信息等。
步骤S22,根据所述扫描范围确定待扫描数据所属的目标数据表及所述目标数据表中存在所述待扫描数据的目标区域,并从列式分布式数据库的底层文件系统的目录中获取所述目标区域的存储路径及描述信息。
Hbase集群维护有一张ROOT表和一张元数据(META)表,zookeeper中记录有ROOT表的存储地址,ROOT表仅包括一个Region片段,其中记录了META表包括的Region以及META表的各个Region所在的工作节点的地址。META表包括一个或多个Region,其中记录了HBase集群的用户数据表包括的Region及每个Region中数据的rowkey范围。
如果所述预设扫描进程确定扫描请求中包括rowkey的起始值和/或结束值,则可以从zookeeper获取ROOT表的地址,进而访问ROOT表并从中获得META表的地址,再访问META表,并根据所述扫描范围从META表中查找目标数据表中的包含待扫描数据的Region,查找到的Region即为目标Region。然后,可以从底层的HDFS的目录中获取目标Region的存储路径和描述信息,描述信息用于表征目标Region包括的列族及该列族包括的HFile文件。
详细地,HDFS的目录结构为:表目录(Table Directory)下是Region目录(Ddirectory),Region目录下是列族目录,列族目录下是当前列族的HFile文件集合。
例如,请结合参照图3,图3为一个示例中的HBase表在HDFS中的物理存储结构。其中,“2h9zd03kd74sl92kd01d3mx6ru0cn”表示Region,cf1、cf2为列族,hfile1、hfile2是列族cf1下的两个Hfile文件。假定从META表中确定2h9zd03kd74sl92kd01d3mx6ru0cn为目标Region,则可以获取到其存储路径为:
“/hbase/data/default/IM_201902/2h9zd03kd74sl92kd01d3mx6ru0cn/”。
基于上述目录结构,可以快速地从HDFS的目录中查找到目标Region并获得其存储路径,然后确定查找到的目标Region的下级目录信息中包含的列族,以及确定的每个列族的下级目录信息中包含的单元文件(即,HFile文件),以得到目标Region的描述信息。
如果所述预设扫描进程确定扫描请求中没有携带rowkey的范围,则可以直接对目标数据表进行全表扫描,即,可以将目标数据表的全部Region均确定为目标Region,并从HDFS的目录中获取目标Region的描述信息和存储路径。
步骤S23,根据所述存储路径和所述描述信息构造与所述目标区域对应的区域对象。
步骤S24,通过所述区域对象提供的扫描器接口从所述底层文件系统中扫描得到所述待扫描数据。
其中,步骤S24可以由与区域服务器进程不同的进程来执行。进一步地,上述的步骤S21至步骤S23均可以由该不同于区域服务器进程的进程来执行。
本实施例中,调用HBase内核提供的相应构造方法来构造(即,实例化)所述Region对象,构造的Region对象封装了区域扫描器(RegionScanner)的类,并提供了用于实例化该类的接口,即所述扫描器接口。通过调用目标Region对应的Region对象的扫描器接口可以构造出用于扫描目标Region的RegionScanner。
所述RegionScanner包括与所述目标Region的每个列族分别对应的列族扫描器(例如,StoreScanner),以及与每个列族下的每个HFile文件分别对应的单元扫描器,在HBase中可以称为HFile扫描器或StoreFileScanner。
所述扫描请求还可以指定需要扫描的列族和HFile文件,即,可能存在有待扫描数据的列族(后文称“目标列族”),以及这些列族下可能存在有待扫描数据的HFile文件(后文称“目标HFile文件”)。
可选地,为了减少扫描的数据量,服务器可以根据所述扫描范围确定存在所述待扫描数据的目标列族以及所述目标列族中存在所述待扫描数据的目标HFile文件。然后,从RegionScanner中过滤掉除与目标列族对应的列族扫描器(后文称“目标列族扫描器”)之外的其它列族扫描器,以及从目标列族扫描器中过滤掉除与目标HFile文件对应的HFile扫描器(后文称“目标HFile扫描器”)之外的其它HFile扫描器。然后,再调用所述RegionScanner从HDFS中扫描得到所述待扫描数据。
具体地,服务器可以通过所述目标列族扫描器遍历所述目标Region中的目标列族,调用所述目标列族扫描器中的目标HFile扫描器来依次打开所述目标列族下的目标HFile文件。其中,每个目标列族通过其对应的目标列族扫描器来遍历,每个目标HFile文件通过其对应的目标HFile扫描器来打开。
可选地,服务器可以判断当前打开的目标HFile文件中是否存在键值对(keyvalue)。如果不存在,则调用所述目标HFile扫描器从所述目标Region中打开下一个目标HFile文件。如果存在,则依次获取当前打开的目标HFile文件中的每个键值对的状态。如果当前获取的键值对的状态为可读状态,则通过所述目标HFile扫描器的数据获取接口读取该键值对中属于所述扫描范围的数据。
请参照图4,图4为本实施例提供的一个keyvalue的数据结构。一个keyvalue包括key、value、值长度(value length)和key长度(length),其中,value是一个二进制数据,key包括主键(rowkey)、列族(column family)、列限定符(column qualifier)、时间戳(timestamp)、主键类型(key type)等信息。
可选地,在通过所述目标HFile扫描器的数据获取接口从键值对读取数据时,可以根据所述扫描范围判断该键值对的时间戳是否属于所述扫描范围中限定的时间戳范围;如果否,则获取下一键值对的状态;如果是,则继续判断该键值对的值是否包含所述扫描范围中限定的版本的数据;如果不包含,则获取当前打开的目标HFile文件的下一键值对的状态;如果包含,通过所述数据获取接口取出该键值对。
值得说明的是,在HBase表中,通过行和列可以定位一个单元格(cell),一个cell中存储有多个版本的keyvalue(键值对)数据,每个版本的数据携带有相应的版本信息。
例如,请参照图5,图5为图3所示物理存储结构的逻辑视图。其中示出了rowkey分别为r1和r2的两条数据,cf1和cf2分别表示两个列族,name为列族cf1下的一个列,content为列族cf2下的一个列。在由r1和cf1:name定位的一个单元格(cell)中存在v1版本的name11和v2版本的name12。在由r2和cf1:name定位的一个单元格中,存在v1版本的name21和v2版本的name22。其中,v1和v2为版本信息。
需要说明的是,在HBase中,采用形如“列族名:列名”的方式来表示一个列。
下面结合图3和图5所示的示例,对所述预设扫描进程调用RegionScanner从HDFS扫描得到所述待扫描数据的过程进行阐述。
例如,在列族cf1下有hfile1和hfile2两个HFile文件,其中,行r1的列cf1:name的两个版本的数据以及行r2的列cf1:name的版本v2的数据均属于hfile1,行r2列cf1:name的版本v1的数据属于hfile2。
如果2h9zd03kd74sl92kd01d3mx6ru0cn为目标Region,列族cf1和cf2均为目标列族,则RregionScanner包括与列族cf1对应的目标列族扫描器StoreScanner1以及与列族cf2对应的目标列族扫描器StoreScanner2。StoreScanner1包括与hfile1对应的目标HFile扫描器StoreFileScanner1以及与hfile2对应的目标HFile扫描器StoreFileScanner2。
所述预设扫描进程在通过RegionScanner从HDFS中扫描所述待扫描数据时,针对rowkey为r1的这条数据,可以通过StoreScanner1访问列族cf1,并通过StoreScanner1中的StoreFileScanner1打开hfile1。然后,确定hfile1中存在键值对,并确定行r1的列cf1:name的键值对可读,则判断该键值对的时间戳是否位于所述扫描范围中,假定判断结果为是,且所述扫描范围限定了需要获取最新版本的数据,则进一步通过StoreFileScanner的数据获取接口从行r1的列cf1:name的键值对中获取最新版本(即,版本v2)的数据,具体为r1:cf1:name:v2:name12。
类似地,再通过StoreScanner2访问列族cf2,并打开相应的HFile文件,假定打开的HFile文件中的键值对可读,且其时间戳位于所述扫描范围,则最终可以获取到行r1的列cf2:content的键值对r1:cf2:content:v1:content1。如此循环往复,直至获取一行数据的全部属于目标列族的列数据,再按照上述过程读取下一条的数据。
在对Region执行写操作之后,写入的数据会存储在列族的内存文件(MemStore)中,当内存文件大小达到一定阈值或数据被写入该内存文件超过一定时长时,才会将内存文件中的缓存数据写入HDFS中形成HFile文件。鉴于本实施例是未经RegionScanner而进行的离线读取,为了确保读取的数据的完整性以及为了确保有数据可读,可以在执行步骤S24之前,将内存文件中的数据全部刷新(flush)到所述HDFS中。
可选地,HBase集群中的Region可以按照需要进行分裂(Split)或合并(Compaction),在发生Region分裂或合并之后,若仍对分类或合并前的原始Region进行访问,则会出现扫描异常,例如,NotServingRegionException,如果在通过所述Region扫描器从HDFS扫描所述待扫描数据的过程中出现该扫描异常,则可以重新根据扫描范围确定目标数据表中存在待扫描数据的目标Region,并重新从HDFS的目录中获取该目标Region的存储路径和描述信息,并基于重新获取的存储路径和描述信息实例化一个Region对象,再调用重新实例化的Region对象的扫描器接口从HDFS中扫描所需数据。
通过上述设计,可以绕开HBase集群的RegionServer直接从HDFS的目录中获取到实例化Region对象所需的参数,基于获取的参数构造区域对象,并通过构造的区域对象的扫描器接口从底层文件系统扫描数据,避免了因RegionServer的大量资源被占用而导致RegionServer提供其它服务的效率较低,或是无法为多个用户提供服务的问题。
值得说明的是,在一些实施方式中,可以基于HBase表的快照(SnapShot)确定待扫描数据在HDFS中的位置,进而从HDFS扫描数据。但这种方式需要提前对HBase表做快照,且快照仅包含了做快照的时刻HBase表的相关信息,如果HBase表的数据在做快照之后发生改变,这些改变将不会体现在快照中。如果此时仍旧基于快照来确定待扫描数据在HDFS中的位置则可能出错,或是导致获取的数据有误。换言之,这种方式的实时性较差,而通过本实施例提供的方案可以在避免前述问题。
请参照图6,图6为本公开提供的一种服务器10的硬件架构示意图。服务器10包括处理器11和机器可读存储介质12,该处理器11和该机器可读存储介质12可以经由系统总线13通讯。该机器可读存储介质12存储有机器可执行指令,该机器可执行指令被执行时可以促使处理器11实现本实施例提供的数据离线扫描方法。
请参照图7,图7为本公开提供的一种数据离线扫描装置20的功能模块框图。所述数据离线扫描装置20包括至少一个可以以软件形式存储于所述机器可读存储介质12中的功能模块。从功能上划分,所述数据离线扫描装置20可以包括接收模块21、构造模块22以及扫描模块23。
所述接收模块21用于接收用户端发送的扫描请求,所述扫描请求包括需要从列式分布式数据库中进行数据扫描的扫描范围。
所述构造模块22用于根据所述扫描范围确定待扫描数据所属的目标数据表及所述目标数据表中存在所述待扫描数据的目标区域,并从列式分布式数据库的底层文件系统的目录中获取所述目标区域的存储路径及描述信息;根据所述存储路径和所述描述信息构造与所述目标区域对应的区域对象。
所述扫描模块23用于通过所述区域对象的扫描器接口从所述底层文件系统中扫描得到所述待扫描数据。
其中,扫描模块23可以在与列式分布式存储系统中的区域服务器进程不同的进程中,通过所述区域对象的扫描器接口从所述底层文件系统中扫描得到所述待扫描数据。
可选地,所述列式分布式数据库中的每个数据表包括至少一个区域,每个区域包括至少一个列族,每个列族包括至少一个单元文件。
在此情况下,所述扫描模块23具体用于:
调用所述区域对象的所述扫描器接口,构造与所述目标区域对应的区域扫描器,其中,所述区域扫描器包括与所述目标区域的每个列族分别对应的列族扫描器以及与每个列族下的每个单元文件分别对应的单元扫描器;根据所述扫描范围确定所述目标区域中存在所述待扫描数据的目标列族及在所述目标列族中存在所述待扫描数据的目标单元文件;从所述区域扫描器中过滤掉除所述目标列族对应的目标列族扫描器之外的其它列族扫描器,从所述目标列族对应的列族扫描器中过滤掉所述目标单元文件对应的目标单元扫描器之外的其它但由于扫描器;调用过滤后的区域扫描器从所述底层文件系统中扫描得到所述待扫描数据。
可选地,所述扫描模块23调用所述目标列族扫描器遍历所述目标区域中的所述目标列族,调用所述目标单元扫描器依次打开所述目标列族下的目标单元文件,通过所述目标单元扫描器的数据获取接口从当前打开的目标单元文件的键值对中读取属于所述扫描范围的键值对,从而得到所述待扫描数据。
可选地,所述扫描模块23通过所述目标单元扫描器的数据获取接口从当前打开的目标单元文件的键值对中读取属于所述扫描范围的键值对的具体方式为:
判断当前打开的目标单元文件中是否存在键值对;若当前打开的目标单元文件不存在键值对,则调用所述目标单元扫描器从所述目标区域中打开下一个目标单元文件;若当前打开的目标单元文件中存在键值对,则依次获取该当前打开的目标单元文件中的每个键值对的状态;若当前获取的键值对的状态为不可读状态,则获取下一个键值对的状态;若当前获取的键值对的状态为可读状态,则通过所述目标单元扫描器的数据获取接口读取该键值对中属于所述扫描范围的数据。
可选地,所述数据离线扫描装置20还包括刷新模块24。
所述刷新模块24用于在通过所述区域对象提供的扫描器从所述底层文件系统中扫描所述待扫描数据之前,将所述列式分布式数据库的内存中的数据刷新到所述底层文件系统中。
可选地,所述构造模块22还用于当所述扫描模块23通过所述区域对象的扫描器接口从所述底层文件系统扫描所述待扫描数据的过程出现异常时,重新根据所述扫描范围确定所述目标数据表中存在所述待扫描数据的目标区域。
综上所述,本公开提供的一种数据离线扫描方法、装置、服务器及可读存储介质,通过直接从列式分布式数据库的底层文件系统的目录获取构造区域对象所需的参数,基于获取的参数构造区域对象,并通过构造的区域对象的扫描器接口从底层文件系统扫描所需数据,能够在不依赖列式分布式数据库的区域服务器进程的情况下实现数据扫描,避免了当所需扫描的数据量较大时,因占用区域服务器进程的大量资源而导致区域服务器进程提供的其它服务响应较慢的问题,以及因单个用户扫描大量数据而导致的区域服务器进程无法为其他用户提供服务的问题。
在本公开所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本公开的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本公开各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。
Claims (9)
1.一种数据离线扫描方法,其特征在于,应用于服务器,所述方法包括:
接收用户端发送的扫描请求,所述扫描请求包括需要从列式分布式数据库中进行数据扫描的扫描范围,所述列式分布式数据库中的每个数据表包括至少一个区域,每个区域包括至少一个列族,每个列族包括至少一个单元文件;
根据所述扫描范围确定待扫描数据所属的目标数据表及所述目标数据表中存在所述待扫描数据的目标区域,并从所述列式分布式数据库的底层文件系统的目录中获取所述目标区域的存储路径和描述信息;
根据所述存储路径和所述描述信息构造与所述目标区域对应的区域对象;通过所述区域对象的扫描器接口从所述底层文件系统中扫描得到所述待扫描数据;
所述通过所述区域对象的扫描器接口从所述底层文件系统中扫描得到所述待扫描数据的步骤,包括:
调用所述区域对象的所述扫描器接口,构造与所述目标区域对应的区域扫描器;其中,所述区域扫描器包括与所述目标区域的每个列族分别对应的列族扫描器以及与每个列族下的每个单元文件分别对应的单元扫描器;
根据所述扫描范围确定所述目标区域中存在所述待扫描数据的目标列族及在所述目标列族中存在所述待扫描数据的目标单元文件;
从所述区域扫描器中过滤掉除所述目标列族对应的目标列族扫描器之外的其它列族扫描器,从所述目标列族对应的列族扫描器中过滤掉所述目标单元文件对应的目标单元扫描器之外的其它单元扫描器;
调用过滤后的区域扫描器从所述底层文件系统中扫描得到所述待扫描数据。
2.根据权利要求1所述的方法,其特征在于,所述服务器在与所述列式分布式数据库的区域服务器进程不同的进程中,执行所述通过所述区域对象的扫描器接口从所述底层文件系统中扫描得到所述待扫描数据的步骤。
3.根据权利要求1所述的方法,其特征在于,所述调用过滤后的区域扫描器从所述底层文件系统中扫描得到所述待扫描数据的步骤,包括:
调用所述目标列族扫描器遍历所述目标区域中的所述目标列族,调用所述目标单元扫描器依次打开所述目标列族下的目标单元文件;
通过所述目标单元扫描器的数据获取接口从当前打开的目标单元文件的键值对中读取属于所述扫描范围的键值对。
4.根据权利要求3所述的方法,其特征在于,所述通过所述目标单元扫描器的数据获取接口从当前打开的目标单元文件的键值对中读取属于所述扫描范围的键值对的步骤,包括:
判断当前打开的目标单元文件中是否存在键值对;
若当前打开的目标单元文件不存在键值对,则调用所述目标单元扫描器从所述目标区域中打开下一个目标单元文件;
若当前打开的目标单元文件中存在键值对,则依次获取该当前打开的目标单元文件中的每个键值对的状态;
若当前获取的键值对的状态为不可读状态,则获取下一个键值对的状态;
若当前获取的键值对的状态为可读状态,则通过所述目标单元扫描器的数据获取接口读取该键值对中属于所述扫描范围的数据。
5.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
在通过所述区域对象提供的扫描器接口从所述底层文件系统中扫描所述待扫描数据之前,将所述列式分布式数据库的内存中的数据刷新到所述底层文件系统中。
6.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
当通过所述区域对象提供的扫描器接口从所述底层文件系统扫描所述待扫描数据的过程出现异常时,重新执行根据所述扫描范围确定所述目标数据表中存在所述待扫描数据的目标区域的步骤。
7.一种数据离线扫描装置,其特征在于,应用于服务器,所述装置包括:
接收模块,用于接收用户端发送的扫描请求,所述扫描请求包括需要从列式分布式数据库中进行数据扫描的扫描范围,所述列式分布式数据库中的每个数据表包括至少一个区域,每个区域包括至少一个列族,每个列族包括至少一个单元文件;
构造模块,用于根据所述扫描范围确定待扫描数据所属的目标数据表及所述目标数据表中存在所述待扫描数据的目标区域,并从所述列式分布式数据库的底层文件系统的目录中获取所述目标区域的存储路径和描述信息;根据所述存储路径和所述描述信息构造与所述目标区域对应的区域对象;
扫描模块,用于通过所述区域对象的扫描器接口从所述底层文件系统中扫描得到所述待扫描数据;
所述扫描模块在用于通过所述区域对象的扫描器接口从所述底层文件系统中扫描得到所述待扫描数据时,具体用于:调用所述区域对象的所述扫描器接口,构造与所述目标区域对应的区域扫描器;其中,所述区域扫描器包括与所述目标区域的每个列族分别对应的列族扫描器以及与每个列族下的每个单元文件分别对应的单元扫描器;根据所述扫描范围确定所述目标区域中存在所述待扫描数据的目标列族及在所述目标列族中存在所述待扫描数据的目标单元文件;从所述区域扫描器中过滤掉除所述目标列族对应的目标列族扫描器之外的其它列族扫描器,从所述目标列族对应的列族扫描器中过滤掉所述目标单元文件对应的目标单元扫描器之外的其它单元扫描器;调用过滤后的区域扫描器从所述底层文件系统中扫描得到所述待扫描数据。
8.一种服务器,其特征在于,包括处理器和可读存储介质,所述可读存储介质存储有机器可执行指令,所述机器可执行指令被执行时促使所述处理器实现权利要求1-6中任意一项所述的数据离线扫描方法。
9.一种可读存储介质,其上存储有机器可执行指令,其特征在于,所述机器可执行指令被执行时实现权利要求1-6中任意一项所述的数据离线扫描方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910624528.9A CN110457279B (zh) | 2019-07-11 | 2019-07-11 | 数据离线扫描方法、装置、服务器及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910624528.9A CN110457279B (zh) | 2019-07-11 | 2019-07-11 | 数据离线扫描方法、装置、服务器及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110457279A CN110457279A (zh) | 2019-11-15 |
CN110457279B true CN110457279B (zh) | 2022-03-11 |
Family
ID=68482582
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910624528.9A Active CN110457279B (zh) | 2019-07-11 | 2019-07-11 | 数据离线扫描方法、装置、服务器及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110457279B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110990472B (zh) * | 2019-11-21 | 2024-03-12 | 中盈优创资讯科技有限公司 | 基于Hbase的数据导出方法及装置 |
CN113312383A (zh) * | 2021-06-01 | 2021-08-27 | 拉卡拉支付股份有限公司 | 数据查询方法、装置、电子设备、存储介质及程序产品 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103631940A (zh) * | 2013-12-09 | 2014-03-12 | 中国联合网络通信集团有限公司 | 一种应用于hbase数据库的数据写入方法及系统 |
CN104123392A (zh) * | 2014-08-11 | 2014-10-29 | 吉林禹硕动漫游戏科技股份有限公司 | 一种关系型数据库迁移到HBase数据库的工具和方法 |
CN105988995A (zh) * | 2015-01-27 | 2016-10-05 | 杭州海康威视数字技术股份有限公司 | 一种基于HFile批量加载数据的方法 |
CN106294886A (zh) * | 2016-10-17 | 2017-01-04 | 北京集奥聚合科技有限公司 | 一种从HBase中全量抽取数据的方法及系统 |
CN107741961A (zh) * | 2017-09-25 | 2018-02-27 | 阿里巴巴集团控股有限公司 | 基于Hbase的全表扫描方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9842126B2 (en) * | 2012-04-20 | 2017-12-12 | Cloudera, Inc. | Automatic repair of corrupt HBases |
US10353923B2 (en) * | 2014-04-24 | 2019-07-16 | Ebay Inc. | Hadoop OLAP engine |
US10565202B2 (en) * | 2017-02-08 | 2020-02-18 | International Business Machines Corporation | Data write/import performance in a database through distributed memory |
-
2019
- 2019-07-11 CN CN201910624528.9A patent/CN110457279B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103631940A (zh) * | 2013-12-09 | 2014-03-12 | 中国联合网络通信集团有限公司 | 一种应用于hbase数据库的数据写入方法及系统 |
CN104123392A (zh) * | 2014-08-11 | 2014-10-29 | 吉林禹硕动漫游戏科技股份有限公司 | 一种关系型数据库迁移到HBase数据库的工具和方法 |
CN105988995A (zh) * | 2015-01-27 | 2016-10-05 | 杭州海康威视数字技术股份有限公司 | 一种基于HFile批量加载数据的方法 |
CN106294886A (zh) * | 2016-10-17 | 2017-01-04 | 北京集奥聚合科技有限公司 | 一种从HBase中全量抽取数据的方法及系统 |
CN107741961A (zh) * | 2017-09-25 | 2018-02-27 | 阿里巴巴集团控股有限公司 | 基于Hbase的全表扫描方法及装置 |
Non-Patent Citations (4)
Title |
---|
Rethinking Hbase:design and implementation of an elastic key-value store over log-structured local volumes;Giorgos Saloustros等;《2015 14th internationalsymposium on parallel and distributed computing》;20150723;2379-5352页 * |
基于HBase的大数据存储查询技术研究;付文静;《中国优秀硕士学位论文全文数据库 信息科技辑》;20160315;I138-5301 * |
日志大数据索引与查询方法研究;丁一铭;《中国优秀硕士学位论文全文数据库》;20190315;I138-613 * |
玩转HBase百亿级数据扫描;科技中通;《https://www.secrss.com/articles/11971?ivk_sa=1024320u》;20190705;第1-3页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110457279A (zh) | 2019-11-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200344322A1 (en) | Resource scheduling method, apparatus, device and system | |
CN107169083B (zh) | 公安卡口海量车辆数据存储与检索方法及装置、电子设备 | |
CN112910945B (zh) | 请求链路跟踪方法和业务请求处理方法 | |
CN108197200B (zh) | 日志追踪方法、装置、计算机设备和存储介质 | |
CN113297166A (zh) | 数据处理系统、方法以及装置 | |
CN111241122B (zh) | 任务监测方法、装置、电子设备和可读存储介质 | |
CN110457279B (zh) | 数据离线扫描方法、装置、服务器及可读存储介质 | |
CN111209256A (zh) | 一种文件监控方法、装置、电子设备及存储介质 | |
CN106776795B (zh) | 基于Hbase数据库的数据写入方法及装置 | |
CN110780950B (zh) | 接口元数据管理方法、装置、计算机设备及存储介质 | |
CN115168338A (zh) | 数据处理方法、电子设备及存储介质 | |
CN111522870B (zh) | 数据库访问方法、中间件和可读存储介质 | |
CN111159106A (zh) | 一种数据查询方法及装置 | |
CN116303628A (zh) | 基于Elasticsearch的告警数据查询方法、系统及设备 | |
US10452637B1 (en) | Migration of mutable data sets between data stores | |
CN112148745B (zh) | 一种多HBase集群访问方法、装置及存储介质 | |
CN114116646A (zh) | 日志数据处理方法、装置、设备和存储介质 | |
CN112699129A (zh) | 一种数据处理系统、方法及装置 | |
CN115730016B (zh) | 数据同步方法、系统、装置、计算机设备和存储介质 | |
CN116126797A (zh) | 大数据集群的文件清理方法及相关设备 | |
CN117950985A (zh) | 搜索引擎的存储性能测试方法及相关设备 | |
CN117112291A (zh) | 数据的备份方法及备份装置 | |
CN117785967A (zh) | 数据处理方法、装置、电子设备和存储介质 | |
CN112612805A (zh) | 一种hbase数据索引到查询引擎的方法和相关装置 | |
CN117421479A (zh) | 实时样本生成方法、电子设备、服务器及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |