CN103631940A - 一种应用于hbase数据库的数据写入方法及系统 - Google Patents
一种应用于hbase数据库的数据写入方法及系统 Download PDFInfo
- Publication number
- CN103631940A CN103631940A CN201310664539.2A CN201310664539A CN103631940A CN 103631940 A CN103631940 A CN 103631940A CN 201310664539 A CN201310664539 A CN 201310664539A CN 103631940 A CN103631940 A CN 103631940A
- Authority
- CN
- China
- Prior art keywords
- subregion
- memstore
- buffer memory
- data
- write
- 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.)
- Granted
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24554—Unary operations; Data partitioning operations
- G06F16/24557—Efficient disk access during query execution
Abstract
本发明提供了一种应用于HBASE数据库的数据写入方法及系统;所述方法包括:当检测到需要对第一分区的缓存Memstore进行缓存写入磁盘Flush操作时,查找数据量小于预定阈值的Memstore数据;将查找到的Memstore数据写入固态硬盘上与所述第一分区对应的分区缓存中,形成磁盘文件;定期对所述固态硬盘上的所述磁盘文件进行压缩;当检测到所述第一分区空闲时,将所述固态硬盘上相应的分区缓存中的所述磁盘文件转移到所述第一分区中。本发明能够提高HBASE数据库的写入效率。
Description
技术领域
本发明涉及数据处理领域,尤其涉及一种应用于HBASE数据库的数据写入方法及数据库系统。
背景技术
HBASE是基于HADOOP(一种分布式系统基础架构)分布式存储系统HDFS建立起的大数据存储系统,其主要特点是采用稀疏的多维映射表形式进行存储。对于TB级以上的大数据,较传统的关系型数据库,在查询和分析效率上有很大的提升。HBASE体系中两个重要组成部分是Region(分区)和RegionServer(分区服务器)。其中Region是HBASE中一张表格HTABLE的逻辑单元,即一张HTABLE表按照rowkey(行标识)的顺序划分成多个Region,分别由不同的RegionServer进行管理。RegionServer维护其下管理的Regions,并处理对这些Region的IO(输入输出)请求。具体逻辑关系如图1所示,分布式服务框架Zookeeper及其连接的Master(主节点)和Client(从节点)通过RegionServer Cluster(分区服务器簇)对HDFS中的文件HFile进行访问;所述RegionServer Cluster中的各RegionServer均包含一个Hlog对象,每个RegionServer管理不同的Region(内部结构将在后文介绍)。不同RegionServer下的不同Region组成HTABLE表。HBASE数据库中包含多张HTABLE表。
如图2所示,Region内部由一个或多个Store(存储单元)组成,每个family(列族)对应一个Store。每个Store又由一个Memstore(缓存)和0至多个Storefile(磁盘)组成。Storefile以HFile的格式保存在HADOOP分布式存储系统HDFS上。Memstore位于内存当中。
HBASE表采用稀疏的表结构,其组成方式如表一所示:
表一、HTABLE表结构
如表一所示,HTABLE每张表中的记录由一个rowkey和多个family组成,每个family下包含一个到多个column(列)。当向HTABLE添加数据时,每个family会在内存中形成一个单独的内存空间,即Memstore。HBASE中建立新的TABLE表后,会生成相应的列族(family)和列信息,并在内存中开辟相应个数Memstore,有多少个列族(family)就会生成多少个Memstore,相对应的Region上就会有相应个数的Store。
当数据记录,即(key-value)向HBASE写入(write)时,会先写入到相应的Memstore当中,当Region中所有Store中的Memstore记录总条数超过一定数量(超过参数Memstore-size,该参数在配置文件中设定)时,会将Memstore中数据写入到磁盘上,格式为HFile(即HTABLE中的Storefile文件)。该过程称为Flush(缓存写入磁盘)操作,Flush操作是将内存中所有Memstore中的数据都写入到磁盘形成HFile文件。由于各个Store中Memstore的大小不同,因此每次Flush操作都会在磁盘的不同Store上产生不同大小的Storefile文件,存在较多的小的Storefile文件。
当Store中Storefile文件个数超过一定数量(默认数量为7)时,会触发Compaction(合并)操作,即将小的Storefile文件合并为大的Storefile文件。Compaction过程中会锁住该Region的更新,时间为100s。若刚好此时Memstore进行Flush操作,由于无法更新Region,会将该数据放入Flush-queue(Flush队列)当中。同时,重新创建Memstore区域用于接收用户数据写入。由于Flush-queue队列中的数据仍然保持在内存当中,因此内存会不断增大。
当内存中的数据超过Region的Memstore-size上限时(默认为Memstore-size×2),就会block(阻塞)住HBASE写入(write),等待Flush操作将Flush-queue中的Memstore数据都写入到磁盘形成Storefile文件,才允许数据继续写入到Memstore当中。这样做是为了防止内存中数据过多引发崩溃。
由于从Memstore Flush到Storefile的过程和Storefile的Compaction操作是磁盘IO操作比数据write到Memstore的速度低,很容易引发内存超限而block(阻塞)住HBASE写入。同时,由于Flush操作产生很多小文件,又很容易引发HBASE的Compaction操作,频繁的Compaction操作,对HBASE的写入性能必然产生很大的影响。从压测数据来看,HBASE数据库在高速写入情况下,呈现锯齿状条纹。
目前对于这种问题的方法主要是减少Compaction操作。比如设定HTABLE表的family列只有一列,这样在Flush操作时,不会在Region中产生很多Storefile文件;再比如将Store中Storefile的上限设置为较大的值,即在写入过程中不进行Compaction操作。
以上两种方法只是减少了阻塞HBASE写入的概率,并不能从根本上解决Compaction速度较慢的问题。设定HTABLE表的family列只有一列的做法虽然减少了Storefile产生数量,相应的减少了Compaction操作次数。但是该Store中Storefile数量仍然会达到上限触发Compaction操作,同样会出现阻塞HBASE写入的问题;将Store中Storefile的上限设置为较大的值的做法虽然可以不进行Compaction操作,但会直接导致Region内部的Storefile大小相差很大,数量众多,使得后期HTABLE操作效率严重下降。同时,也不符合HBASE的基本思想。
发明内容
本发明要解决的技术问题是如何提高HBASE数据库的写入效率。
为了解决上述问题,本发明提供了一种应用于HBASE数据库的数据写入方法,包括:
当检测到需要对第一分区的缓存Memstore进行缓存写入磁盘Flush操作时,查找数据量小于预定阈值的Memstore数据;将查找到的Memstore数据写入固态硬盘上与所述第一分区对应的分区缓存中,形成磁盘文件;
定期对所述固态硬盘上的所述磁盘文件进行压缩;当检测到所述第一分区空闲时,将所述固态硬盘上相应的分区缓存中的所述磁盘文件转移到所述第一分区中。
可选地,所述预定阈值为Memstore-size的1/3,其中Memstore-size为所述磁盘文件的最大值。
可选地,所述的方法还包括:
当检测到所述第一分区的内存大小超过上限引发对HBASE的阻塞写入操作时,将所述第一分区的Flush队列中的Memstore数据写入所述固态硬盘上对应于所述第一分区的分区缓存中,形成磁盘文件。
可选地,所述的方法还包括:
分别根据各分区包含的行标识设置该分区在所述固态硬盘中所对应的分区缓存的起始行标识Startkey和结束行标识Stopkey,其中Stopkey大于Startkey;
所述将查找到的Memstore数据写入固态硬盘上所述第一分区对应的分区缓存中,形成磁盘文件的步骤包括:
当向所述固态硬盘写入Memstore数据时,对所写入的Memstore数据按照行标识进行排序,并获取所写入的Memstore数据中行标识的最大值和最小值;
查找所述固态硬盘中是否存在Startkey小于所述行标识的最小值且Stopkey大于所述行标识的最大值的分区缓存;
如果存在,则确定所查找到的所述固态硬盘中的分区缓存为所述第一分区对应的分区缓存;
如果不存在,则将所写入的Memstore数据的所有行标识分别和所述固态硬盘中各分区缓存包含的行标识进行比较,确定相同行标识个数最多的分区缓存作为所述第一分区对应的分区缓存;根据所写入的Memstore数据的行标识更新所确定的分区缓存的Startkey和Stopkey;
将按照行标识排序后的Memstore数据写入所确定的分区缓存,形成磁盘文件。
可选地,所述对固态硬盘上的磁盘文件进行压缩的步骤包括:
21、在所述固态硬盘上的所述磁盘文件中,选出相邻且文件大小之和最小的两个磁盘文件;
22、合并选出的两个磁盘文件,返回步骤21。
本发明还提供了一种应用于HBASE数据库的数据写入系统,包括:
缓存写入磁盘控制模块,用于当检测到需要对第一分区的缓存Memstore进行缓存写入磁盘Flush操作时,查找数据量小于预定阈值的Memstore数据;将查找到的Memstore数据写入固态硬盘上与所述第一分区对应的分区缓存中,形成磁盘文件;
分区缓存控制模块,用于定期对所述固态硬盘上的所述磁盘文件进行压缩;当检测到所述第一分区空闲时,调用所述缓存写入磁盘控制模块将所述固态硬盘上相应的分区缓存中的所述磁盘文件转移到所述第一分区中。
可选地,所述预定阈值为Memstore-size的1/3,其中Memstore-size为所述磁盘文件的最大值。
可选地,所述缓存写入磁盘控制模块还用于当检测到所述第一分区的内存大小超过上限引发对HBASE的阻塞写入操作时,将所述第一分区的Flush队列中的Memstore数据写入所述固态硬盘上对应于所述第一分区的分区缓存中,形成磁盘文件。
可选地,所述分区缓存控制模块还用于分别根据各分区包含的行标识设置该分区在所述固态硬盘中所对应的分区缓存的起始行标识Startkey和结束行标识Stopkey,其中Stopkey大于Startkey;还用于当向所述固态硬盘写入Memstore数据时,对所写入的Memstore数据按照行标识进行排序,并获取所写入的Memstore数据中行标识的最大值和最小值;查找所述固态硬盘中是否存在Startkey小于所述行标识的最小值且Stopkey大于所述行标识的最大值的分区缓存;如果存在,则确定所查找到的所述固态硬盘中的分区缓存为所述第一分区对应的分区缓存;如果不存在,则将所写入的Memstore数据的所有行标识分别和所述固态硬盘中各分区缓存包含的行标识进行比较,确定相同行标识个数最多的分区缓存作为所述第一分区对应的分区缓存,根据所写入的Memstore数据的行标识更新所确定的分区缓存的Startkey和Stopkey。
可选地,所述分区缓存控制模块对固态硬盘上的磁盘文件进行压缩是指:
所述分区缓存控制模块在所述固态硬盘上的所述磁盘文件中,选出相邻且文件大小之和最小的两个磁盘文件;合并选出的两个磁盘文件;重复进行选出两个磁盘文件及合并的操作。
本发明的至少一个实施例能够保证HBASE中的Memstore数据能够及时的清理,HBASE能够持续高速写入而不会发生阻塞,又能够节省成本。
附图说明
图1为HBASE的结构示意图;
图2为Region的内部结构示意图;
图3为实施例一的数据写入方法的示意图;
图4为现有技术中入库内存使用率变化示意图;
图5为实施例一中入库内存使用率变化示意图;
图6为实施例一中SSD的区域分配示意图。
具体实施方式
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
需要说明的是,如果不冲突,本发明实施例以及实施例中的各个特征可以相互结合,均在本发明的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
实施例一、一种应用于HBASE数据库的数据写入方法,包括:
当检测到需要对第一Region(分区)的Memstore进行Flush(缓存写入磁盘)操作时,查找数据量小于预定阈值的Memstore数据;将查找到的Memstore数据写入SSD(固态硬盘)上与所述第一分区对应的Region-Cache(分区缓存)中,形成Storefile(磁盘)文件;
定期对所述SSD上的所述磁盘文件进行压缩;当检测到所述第一分区空闲时,将所述SSD上相应的分区缓存中的所述磁盘文件转移到所述第一分区中。
由于SSD本身具有很高的读写效率,其写入速度是普通SATA(串口)硬盘的5倍,用于处理文件的Compaction处理和Flush的写入操作都有很高的效率。受限于SSD的价格,不可能用作HBASE的存储磁盘。本实施例利用SSD特性采用其充当二级缓存,只需要在RegionServer节点上部署一部分SSD硬盘。既可以利用其高速写入性能解决内存数据较多引发阻塞的问题,又能够节省成本。
本实施例针对HBASE的特点和现有操作流程,设计了具体写入SSD的时机和方式;将SSD作为HBASE二级缓存时,可以预先根据HBASE的Region的个数及名称,将SSD的物理空间分为若干个Region-Cache(与Region不同的是其内部Store没有Memstore),与各Region一一对应,Region-Cache之间可以是顺序的。分配的比例根据Region比例进行分配。当HBASE写入到Region内部各Memstore的数据量达到阈值进行Flush操作时,会遍历各Store下的Memstore,对于数据量较小的Memstore,将Flush到SSD上相应的Region-Cache区域成为Storefile文件,并在SSD上对Storefile文件进行压缩,在HBASE数据库空闲的时候将SSD上的Storefile文件转移到磁盘上,从而保证HBASE中的Memstore数据能够及时的清理,HBASE能够持续高速写入而不会发生阻塞。
本实施例的一种实施方式中,所述预定阈值可以但不限于为Memstore-size的1/3,其中Memstore-size为所述磁盘文件的最大值。
根据HBASE数据库设计原则,一般column_family不超过3个(超过会导致效率低下),也就是对应的Store个数不超过三个,因此取Memstore-size的大小1/3作为分流的依据,即当Memstore到达1/3的Memstore-size的时候,认为该Memstore已经达到了平均值,可以算作大文件。这时候考虑的是保持Store的稳定性,即从Memstore到Storefile的过程(即分流写入操作),防止过多的Compaction。在其它实施方式中,也可以根据实际情况调整所述预定阈值。
图3展示了本实施例中数据写入方法在各种情况下的流程。需要说明的是,从图1和图2已知每个Region下的各Store包含磁盘上的Storefile文件和内存中的Memstore。图3中将一个Region分为两部分展示,一部分31包含该分区中的各Memstore,另一部分32包含该分区中的各Storefile,这样主要是为了更清楚地展示Memstore、Storefile、SSD之间的关系,这两个部分31、32其实都是一个Region。
当该Region内各Store下的Memstore的数据量总和超过阈值时,进行Flush操作。此时会触发会对该Region内所有的Memstore进行扫描,并进行分拣。本实施方式中,若Memstore的数据量≥1/3×Storefile的最大值,则采用原HBASE Flush方法,将其放入到Flush-queue队列中,等待写入到磁盘Storefile中,如图3的步骤S301所示,Memstore311的数据将Flush成该Region中的Storefile321;若Memstore的数据量<1/3×Storefile的最大值,则根据该Memstore所属的Region确定对应的Region-Cache,写入到SSD上对应的Region-Cache33中,而不再放入到Flush-queue当中,如图3的步骤302所示,Memstore312和Memstore313的数据分别(非同一时间)写入SSD上的Region-Cache33中,分别形成Storefile331和Storefile332。将Storefile331和Storefile332合并为Storefile322,当该Region空闲时,再将SSD中对应于该Region的Region-Cache33上的Storefile322转移到该Region中,如图3的步骤S303所示。
根据以上两步可以看出,一部分零散的小Storefile文件被写入到所述SSD,并完成了Compaction操作,减少了HBASE磁盘上的Compaction操作。但是图3的步骤S301所示过程中,还是有大的Memstore写入到磁盘上形成HFile文件,加之SSD也会在Region空闲的时候向磁盘写入Storefile文件,最终也可能引发磁盘上Region的Compaction操作,进而阻塞write写入。
本实施例的一种实施方式中,所述方法还可以包括:
当检测到所述第一分区的内存大小超过上限引发对HBASE的阻塞写入操作时,将所述第一分区的Flush-queue中的Memstore数据,写入所述SSD上对应于所述第一分区的分区缓存中,形成磁盘文件。
本实施方式能够以最快的速度将Flush-queue队列清空,让HBASE从阻塞状态尽快恢复,如图3的步骤S304,当HBASE被阻塞时,位于Flush-queue中的Memstore314无论多大,都会被写入到所述SSD中相应的Region-Cache33上,形成Storefile323;当Region空闲时,再将Region-Cache33上的Storefile323转移到该Region中,如图3的步骤S303。
综上,也就是在HBASE入库过程中,由于HTABLE表本身的不确定性且每条记录中不同colum_family的值大小不确定,也就导致在实际HBASE入库过程中,从Memstore Flush到Store上的Storefile文件当中,只有小部分的Storefile文件较大,大部分都是较小的文件。Store进行合并的时候,是根据Storefile的数量来进行合并,而并不考虑文件的大小。也就是会容易引发Compaction操作,就达到前面提到的阻塞写入过程的问题。
当内存中Memstore总和>Memstore-size×2的时候,此时整个HBASE的已经被阻塞,优先考虑的是如何让HBASE能重新写入,至少用户能从客户端往内存中提交数据。此时,就应该考虑将Memstore中的数据尽快清空,使从客户端到Memstore中的写入过程重新恢复,保证从客户端来的数据能够持续写入而不至于被阻塞。因此,该情况下是将Flush-queue队列都写入到SSD上,此时保证用户能够写入到内存当中的优先级要高于防止HBASE过多Compaction的操作的优先级。
也就是说,本实施方式对不同情况分别采取“分流”或者“不分流”的情况,是基于HBASE的入库技术特点,即Storefile文件的Compaction操作对内存整个Memstore的影响。可以定时检测Flush-queue队列中每个Memstore大小;检测Flush-queue队列大小是否超过配置文件Memstore的两倍。以此来对Flush-queue队列的Memstore数据标注不同的标签,控制不同的写入方式(HBASE阻塞时不分流,其它Flush过程分流)。
图4为现有技术中HBASE的入库过程,其中横轴为时间轴,单位为分钟;纵轴为百分比,即按照时间推移HBASE使用了可用内存上限值的百分比;图4中每个点表示系统分配给HBASE堆的大小,简单理解为HBASE可用的内存上限。可以看出内存的数据量是一个波浪式的变化过程,因为Compaction的操作会影响从Memstore Flush到Storefile的过程,进而把Memstore数据保存在Flush-queue当中。随着入库内存中Flush-queue队列会越来越长,也就导致内存占用越来越大。当到达100%时(一般也无法达到),将Flush-queue都写入到HBASE后才允许用户写入。图5为采用实施例一的方法后HBASE的入库过程,其中横轴、纵轴及每个点的含义同图4;从图5看出,本实施例的方法在两个地方发挥作用:1、减缓Flush-queue将内存占满的时间,由于一部分分流到SSD上进行处理,不存在磁盘上进行Compaction操作的情况,从图5中看,内存的数据量上升的速度变慢;2、加快了Flush-queue的清空过程,所有的Flush-queue都写入到SSD,处理速度比写入到HBASE磁盘要快几个数量级,因此内存的数据量下降的速度变快。
本实施例的一种实施方式中,所述方法还可以包括:
分别根据各分区包含的rowkey设置该分区在所述SSD中所对应的分区缓存的起始行标识Startkey和结束行标识Stopkey,其中Stopkey大于Startkey;
所述将查找到的Memstore数据写入SSD上所述第一分区对应的分区缓存中,形成磁盘文件的步骤具体可以包括:
当向所述SSD写入Memstore数据时,对所写入的Memstore数据按照rowkey进行排序,并获取所写入的Memstore数据中rowkey的最大值和最小值;
查找所述SSD中是否存在Startkey小于所述rowkey的最小值且Stopkey大于所述rowkey的最大值的分区缓存;
如果存在,则确定所查找到的所述SSD中的分区缓存为所述第一分区对应的分区缓存;
如果不存在,则将所写入的Memstore数据的所有rowkey分别和所述SSD中各分区缓存包含的rowkey进行比较,确定相同rowkey个数最多的分区缓存作为所述第一分区对应的分区缓存;根据所写入的Memstore数据的rowkey更新所确定的分区缓存的Startkey和Stopkey;
将按照rowkey排序后的Memstore数据写入所确定的分区缓存,形成磁盘文件。
本实施方式中,若rowkey最大值和最小值恰好落于某个Region-Cache的Startkey和Stopkey区域当中,则Flush成Storefile文件存入该Region-Cache当中;若rowkey最大值和最小值是跨Region-Cache区域的,则选择落入比例大的Region-Cache区域进行Flush。Flush完成后,若该Region的Startkey和Stopkey发生变化则更新相应的Region-cache的信息。定时同步HBASE Region和SSD中Region-Cache信息。
本实施方式不仅将SSD物理存储区域提前根据Region-Cache进行划分,Storefile的文件操作都在固定的物理区域内进行操作,还在写入SSD前根据rowkey进行了排序,不存在内部排序和合并操作,在物理存储层面上不需要转移,对SSD的内部损耗较少。
本实施方式中,所述对SSD上的磁盘文件进行压缩的步骤具体可以包括:
21、在所述SSD上的所述磁盘文件中,选出相邻且文件大小之和最小的两个磁盘文件;
22、合并选出的两个磁盘文件,返回步骤21。
本实施方式是按照相邻和最小的原则进行合并,由于磁盘文件本身已经按顺序存储,所以该过程会很快。在其它实施方式中也可以用其它原则进行合并。
实施例二,一种应用于HBASE数据库的数据写入系统,包括:
FC(Flush Controler,缓存写入磁盘控制)模块,用于当检测到需要对第一分区的缓存Memstore进行Flush操作时,查找数据量小于预定阈值的Memstore数据;将查找到的Memstore数据写入固态硬盘上与所述第一分区对应的分区缓存中,形成磁盘文件;
RCC(RegionCache Controler,分区缓存控制)模块,用于定期对所述固态硬盘上的所述磁盘文件进行压缩;当检测到所述第一分区空闲时,调用所述FC模块将所述SSD上相应的分区缓存中的所述磁盘文件转移到所述第一分区中。
HBASE数据库中创建HTABLE表时,会创建如图2所示的相应的Region结构,本实施例中的RCC模块会在SSD上创建相应的Region-Cache区域,RCC模块会定时访问HTABLE各Region,并获取各Region当前的状态。若HTABLE表有新的Region产生(一般是某个Region大小达到一定程度触发HBASE split操作,产生新的Region,是HBASE本身控制),则相应的在SSD中建立新的RegionCache,用于分流需要写入到新Region的Memstore数据,将小的Memstore数据Flush到新Region对应的Region-Cache。
RCC模块还可以为各Region-Cache61创建用于记录Storefile相关信息的Schema表62,如图6所示;主要为了后期从SSD向磁盘写Storefile文件时,可以快速定位数据位置(因为HTABLE表本身是排序的,通过记录RegionName、StartKey等信息可以快速定位)。Schema表中的具体参数如表二所示。
表二、Schema表结构
HBASE本身系统中,并不存在Schema表,本实施例中的Schema表的设计就是为了帮助快速Flush Storefile文件,可以快速定位Region位置,并形成有序排列,同时也可以作为与HBASE本身的映射表,方便后面向HBASE转移。
FC控制模块主要监控HBASE数据库写入状态,若检测到Flush操作,则遍历一遍各Store下的Memstore,若一Memstore数据小于预定阈值,根据该Memstore原所属Region将该Memstore数据标记相应的Region-Cache,写入到SSD中的相应Region-Cache上;也就是对Memstore的Flush操作进行分流控制。
RCC模块主要控制所述SSD上Region-Cache的创建;定期会对各个Region-Cache模块进行管理,将同一Store下的Storefile进行Compaction操作(不超过Storefile最大值),并更新Schema表;若有新的Region产生则RCC模块在SSD上开辟Region-Cache。RCC模块会定时获取Region情况,判断Region当前状态。若Region不是处于update状态(此时不允许其他写入)时,表明Region此时处于空闲状态,允许进行写入操作。RCC模块根据Region-Cache中Schema保存的Storefile信息,按照Storefile文件产生的时间先后,将Storefile文件转移到Region内相应的Store下。
本实施例的一种实施方式中,所述预定阈值可以但不限于为Memstore-size的1/3,其中Memstore-size为所述磁盘文件的最大值。
本实施例的一种实施方式中,所述FC模块还可以用于当检测到所述第一分区的内存大小超过上限引发对HBASE的阻塞写入操作时,将所述第一分区的Flush队列中的Memstore数据写入所述固态硬盘上对应于所述第一分区的分区缓存中,形成磁盘文件。
本实施方式中,FC模块定期检测HBASE写入状态及Flush-queue,检测是否为阻塞状态并监视Flush-queue是否有Flush操作,进行相应的分流操作。FC控制模块检测到内存中数据的大小超过2*Memstore-size且写入Memstore的进程被阻塞的时候,扫描Flush-queue队列中所有等待Flush到磁盘上的Memstore数据,并将其全部写入到SSD的Region-Cache中,直到Flush-queue中所有的Memstore数据都Flush到SSD上。此时FC控制模块不再进行分流操作,目的是以最快的速度将Flush-queue队列清空,从而恢复HBASE的写入线程。
本实施例的一种实施方式中,所述RCC模块还可以用于分别根据各分区包含的rowkey设置该分区在所述SSD中所对应的分区缓存的起始行标识Startkey和结束行标识Stopkey,其中Stopkey大于Startkey;还用于当所述FC模块向SSD写入Memstore数据时,将所写入的Memstore数据按照rowkey进行排序,并获取所写入的Memstore数据中rowkey的最大值和最小值;查找所述SSD中是否存在Startkey小于所述rowkey的最小值且Stopkey大于所述rowkey的最大值的分区缓存;如果存在,则确定所查找到的所述SSD中的分区缓存为所述第一分区对应的分区缓存;如果不存在,则将所写入的Memstore数据的所有rowkey分别和所述SSD中各分区缓存包含的rowkey(即位于Startkey和Stopkey之间的rowkey,包括Startkey和Stopkey本身)进行比较,确定相同rowkey个数最多的分区缓存作为所述第一分区对应的分区缓存,根据所写入的Memstore数据的rowkey更新所确定的分区缓存的Startkey和Stopkey。
本实施方式中,RCC模块可以在Schema表中查询Region-Cache,查询结果存在两种情况:第一种情况,若rowkey最大值和最小值恰好落于某个Region-Cache的Startkey和Stopkey区域当中,则Flush成Storefile文件存入该Region-Cache当中;第二种情况,若rowkey最大值和最小值是跨Region-Cache区域的,则选择落入比例大的Region-Cache区域进行写入。
另外,Flush完成后,若Region-Cache的Startkey和Stopkey发生变化(上述第二种情况会导致),则RCC模块控制更新Schema表相应的Region-cache的信息。
本实施方式中,RCC模块定时同步HBASE Region和SSD中Region-Cache信息,主要是指更新Startkey和Stopkey。从Schema获取的StoreID、Startkey和Stopkey可以快速获取Storefile文件的位置信息,提高Storefile从Region-Cache写入到Region的速度。
本实施方式中,所述RCC模块对固态硬盘上的磁盘文件进行压缩具体可以是指:
所述RCC模块在所述固态硬盘上的所述磁盘文件中,选出相邻且文件大小之和最小的两个磁盘文件;合并选出的两个磁盘文件;重复进行选出两个磁盘文件及合并的操作。
HTABLE表内部是按照rowkey排序的,因此RCC控制模块会定时对Region-Cache进行扫描(默认间隔时间为1s)并对Storefile进行合并(Compaction)和排序。先将每个Store下的小的Storefile按照之前的规定进行合并,合并形成的新Storefile内部按照rowkey进行排序,排序完成后更新Schema表。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明的权利要求的保护范围。
Claims (10)
1.一种应用于HBASE数据库的数据写入方法,包括:
当检测到需要对第一分区的缓存Memstore进行缓存写入磁盘Flush操作时,查找数据量小于预定阈值的Memstore数据;将查找到的Memstore数据写入固态硬盘上与所述第一分区对应的分区缓存中,形成磁盘文件;
定期对所述固态硬盘上的所述磁盘文件进行压缩;当检测到所述第一分区空闲时,将所述固态硬盘上相应的分区缓存中的所述磁盘文件转移到所述第一分区中。
2.如权利要求1所述的方法,其特征在于:
所述预定阈值为Memstore-size的1/3,其中Memstore-size为所述磁盘文件的最大值。
3.如权利要求1所述的方法,其特征在于,还包括:
当检测到所述第一分区的内存大小超过上限引发对HBASE的阻塞写入操作时,将所述第一分区的Flush队列中的Memstore数据写入所述固态硬盘上对应于所述第一分区的分区缓存中,形成磁盘文件。
4.如权利要求1到3中任一项所述的方法,其特征在于,还包括:
分别根据各分区包含的行标识设置该分区在所述固态硬盘中所对应的分区缓存的起始行标识Startkey和结束行标识Stopkey,其中Stopkey大于Startkey;
所述将查找到的Memstore数据写入固态硬盘上所述第一分区对应的分区缓存中,形成磁盘文件的步骤包括:
当向所述固态硬盘写入Memstore数据时,对所写入的Memstore数据按照行标识进行排序,并获取所写入的Memstore数据中行标识的最大值和最小值;
查找所述固态硬盘中是否存在Startkey小于所述行标识的最小值且Stopkey大于所述行标识的最大值的分区缓存;
如果存在,则确定所查找到的所述固态硬盘中的分区缓存为所述第一分区对应的分区缓存;
如果不存在,则将所写入的Memstore数据的所有行标识分别和所述固态硬盘中各分区缓存包含的行标识进行比较,确定相同行标识个数最多的分区缓存作为所述第一分区对应的分区缓存;根据所写入的Memstore数据的行标识更新所确定的分区缓存的Startkey和Stopkey;
将按照行标识排序后的Memstore数据写入所确定的分区缓存,形成磁盘文件。
5.如权利要求4所述的方法,其特征在于,所述对固态硬盘上的磁盘文件进行压缩的步骤包括:
21、在所述固态硬盘上的所述磁盘文件中,选出相邻且文件大小之和最小的两个磁盘文件;
22、合并选出的两个磁盘文件,返回步骤21。
6.一种应用于HBASE数据库的数据写入系统,其特征在于,包括:
缓存写入磁盘控制模块,用于当检测到需要对第一分区的缓存Memstore进行缓存写入磁盘Flush操作时,查找数据量小于预定阈值的Memstore数据;将查找到的Memstore数据写入固态硬盘上与所述第一分区对应的分区缓存中,形成磁盘文件;
分区缓存控制模块,用于定期对所述固态硬盘上的所述磁盘文件进行压缩;当检测到所述第一分区空闲时,调用所述缓存写入磁盘控制模块将所述固态硬盘上相应的分区缓存中的所述磁盘文件转移到所述第一分区中。
7.如权利要求6所述的系统,其特征在于:
所述预定阈值为Memstore-size的1/3,其中Memstore-size为所述磁盘文件的最大值。
8.如权利要求6所述的系统,其特征在于:
所述缓存写入磁盘控制模块还用于当检测到所述第一分区的内存大小超过上限引发对HBASE的阻塞写入操作时,将所述第一分区的Flush队列中的Memstore数据写入所述固态硬盘上对应于所述第一分区的分区缓存中,形成磁盘文件。
9.如权利要求6到8中任一项所述的方法,其特征在于:
所述分区缓存控制模块还用于分别根据各分区包含的行标识设置该分区在所述固态硬盘中所对应的分区缓存的起始行标识Startkey和结束行标识Stopkey,其中Stopkey大于Startkey;还用于当向所述固态硬盘写入Memstore数据时,对所写入的Memstore数据按照行标识进行排序,并获取所写入的Memstore数据中行标识的最大值和最小值;查找所述固态硬盘中是否存在Startkey小于所述行标识的最小值且Stopkey大于所述行标识的最大值的分区缓存;如果存在,则确定所查找到的所述固态硬盘中的分区缓存为所述第一分区对应的分区缓存;如果不存在,则将所写入的Memstore数据的所有行标识分别和所述固态硬盘中各分区缓存包含的行标识进行比较,确定相同行标识个数最多的分区缓存作为所述第一分区对应的分区缓存,根据所写入的Memstore数据的行标识更新所确定的分区缓存的Startkey和Stopkey。
10.如权利要求9所述的系统,其特征在于,所述分区缓存控制模块对固态硬盘上的磁盘文件进行压缩是指:
所述分区缓存控制模块在所述固态硬盘上的所述磁盘文件中,选出相邻且文件大小之和最小的两个磁盘文件;合并选出的两个磁盘文件;重复进行选出两个磁盘文件及合并的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310664539.2A CN103631940B (zh) | 2013-12-09 | 2013-12-09 | 一种应用于hbase数据库的数据写入方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310664539.2A CN103631940B (zh) | 2013-12-09 | 2013-12-09 | 一种应用于hbase数据库的数据写入方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103631940A true CN103631940A (zh) | 2014-03-12 |
CN103631940B CN103631940B (zh) | 2017-02-08 |
Family
ID=50212981
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310664539.2A Active CN103631940B (zh) | 2013-12-09 | 2013-12-09 | 一种应用于hbase数据库的数据写入方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103631940B (zh) |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729429A (zh) * | 2013-12-26 | 2014-04-16 | 浪潮电子信息产业股份有限公司 | 一种基于HBase压缩方法 |
CN104021161A (zh) * | 2014-05-27 | 2014-09-03 | 华为技术有限公司 | 一种聚簇存储方法及装置 |
CN104199901A (zh) * | 2014-08-27 | 2014-12-10 | 浪潮集团有限公司 | 一种批量合并hbase表regions的方法 |
CN104317749A (zh) * | 2014-10-31 | 2015-01-28 | 小米科技有限责任公司 | 信息写入方法和装置 |
CN104461382A (zh) * | 2014-11-26 | 2015-03-25 | 华为技术有限公司 | 运行多个文件系统的文件服务器的内部写方法和服务器 |
CN104794068A (zh) * | 2015-02-04 | 2015-07-22 | 北京神州云科数据技术有限公司 | 一种flush缓存的方法及装置 |
WO2016046667A1 (en) * | 2014-09-24 | 2016-03-31 | International Business Machines Corporation | Caching methodology for dynamic semantic tables |
CN105740332A (zh) * | 2016-01-22 | 2016-07-06 | 北京京东尚科信息技术有限公司 | 数据排序方法和装置 |
CN106372121A (zh) * | 2016-08-23 | 2017-02-01 | 努比亚技术有限公司 | 服务器及数据处理方法 |
CN107370797A (zh) * | 2017-06-30 | 2017-11-21 | 北京百度网讯科技有限公司 | 一种基于HBase的强有序队列操作的方法和装置 |
CN107430493A (zh) * | 2015-03-27 | 2017-12-01 | 英特尔公司 | 顺序写入流管理 |
CN107491314A (zh) * | 2017-08-30 | 2017-12-19 | 四川长虹电器股份有限公司 | 基于读写锁算法对hbase实时数据无障碍写处理方法 |
CN108228752A (zh) * | 2017-12-21 | 2018-06-29 | 中国联合网络通信集团有限公司 | 数据全量导出方法、数据分配装置及数据导出节点 |
CN108563698A (zh) * | 2018-03-22 | 2018-09-21 | 中国银联股份有限公司 | 一种HBase表的Region合并方法和装置 |
CN105045894B (zh) * | 2015-07-31 | 2018-12-04 | 中国科学院计算技术研究所 | 一种面向分布式顺序表的缓存方法及系统 |
CN110019168A (zh) * | 2017-12-26 | 2019-07-16 | 浙江宇视科技有限公司 | 文件合并方法和系统 |
CN110457279A (zh) * | 2019-07-11 | 2019-11-15 | 新华三大数据技术有限公司 | 数据离线扫描方法、装置、服务器及可读存储介质 |
CN110990394A (zh) * | 2018-09-28 | 2020-04-10 | 杭州海康威视数字技术股份有限公司 | 分布式面向列数据库表的行数统计方法、装置和存储介质 |
CN111143363A (zh) * | 2019-12-23 | 2020-05-12 | 武汉光谷信息技术股份有限公司 | 一种基于HBase的3D Tiles数据的存取方法及装置 |
CN112084163A (zh) * | 2020-09-04 | 2020-12-15 | 珠海大横琴科技发展有限公司 | 一种数据写入方法、装置及计算机设备 |
CN113535721A (zh) * | 2018-08-31 | 2021-10-22 | 创新先进技术有限公司 | 一种数据写入方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009046353A1 (en) * | 2007-10-05 | 2009-04-09 | Diskeeper Corporation | Solid state drive optimizer |
CN102725752A (zh) * | 2011-10-20 | 2012-10-10 | 华为技术有限公司 | 处理脏数据的方法及装置 |
CN102945207A (zh) * | 2012-10-26 | 2013-02-27 | 浪潮(北京)电子信息产业有限公司 | 一种块级数据的缓存管理方法及系统 |
CN103136121A (zh) * | 2013-03-25 | 2013-06-05 | 中国人民解放军国防科学技术大学 | 一种固态盘的缓存管理方法 |
CN103218179A (zh) * | 2013-04-23 | 2013-07-24 | 深圳市京华科讯科技有限公司 | 基于虚拟化的二级系统加速方法 |
CN103279561A (zh) * | 2013-06-13 | 2013-09-04 | 三珠数码软件开发(上海)有限公司 | 一种提高数据库数据随机读写速度的方法 |
-
2013
- 2013-12-09 CN CN201310664539.2A patent/CN103631940B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009046353A1 (en) * | 2007-10-05 | 2009-04-09 | Diskeeper Corporation | Solid state drive optimizer |
CN102725752A (zh) * | 2011-10-20 | 2012-10-10 | 华为技术有限公司 | 处理脏数据的方法及装置 |
CN102945207A (zh) * | 2012-10-26 | 2013-02-27 | 浪潮(北京)电子信息产业有限公司 | 一种块级数据的缓存管理方法及系统 |
CN103136121A (zh) * | 2013-03-25 | 2013-06-05 | 中国人民解放军国防科学技术大学 | 一种固态盘的缓存管理方法 |
CN103218179A (zh) * | 2013-04-23 | 2013-07-24 | 深圳市京华科讯科技有限公司 | 基于虚拟化的二级系统加速方法 |
CN103279561A (zh) * | 2013-06-13 | 2013-09-04 | 三珠数码软件开发(上海)有限公司 | 一种提高数据库数据随机读写速度的方法 |
Cited By (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729429A (zh) * | 2013-12-26 | 2014-04-16 | 浪潮电子信息产业股份有限公司 | 一种基于HBase压缩方法 |
WO2015180432A1 (zh) * | 2014-05-27 | 2015-12-03 | 华为技术有限公司 | 一种聚簇存储方法及装置 |
CN104021161A (zh) * | 2014-05-27 | 2014-09-03 | 华为技术有限公司 | 一种聚簇存储方法及装置 |
RU2663358C2 (ru) * | 2014-05-27 | 2018-08-03 | Хуавэй Текнолоджиз Ко., Лтд. | Устройство и способ кластерного хранения |
JP2017526027A (ja) * | 2014-05-27 | 2017-09-07 | 華為技術有限公司Huawei Technologies Co.,Ltd. | クラスタリング記憶方法および装置 |
US10817258B2 (en) | 2014-05-27 | 2020-10-27 | Huawei Technologies Co., Ltd. | Clustering storage method and apparatus |
CN104199901A (zh) * | 2014-08-27 | 2014-12-10 | 浪潮集团有限公司 | 一种批量合并hbase表regions的方法 |
WO2016046667A1 (en) * | 2014-09-24 | 2016-03-31 | International Business Machines Corporation | Caching methodology for dynamic semantic tables |
CN104317749B (zh) * | 2014-10-31 | 2017-12-05 | 小米科技有限责任公司 | 信息写入方法和装置 |
CN104317749A (zh) * | 2014-10-31 | 2015-01-28 | 小米科技有限责任公司 | 信息写入方法和装置 |
CN104461382A (zh) * | 2014-11-26 | 2015-03-25 | 华为技术有限公司 | 运行多个文件系统的文件服务器的内部写方法和服务器 |
CN104794068A (zh) * | 2015-02-04 | 2015-07-22 | 北京神州云科数据技术有限公司 | 一种flush缓存的方法及装置 |
CN104794068B (zh) * | 2015-02-04 | 2018-05-22 | 深圳神州数码云科数据技术有限公司 | 一种flush缓存的方法及装置 |
CN107430493A (zh) * | 2015-03-27 | 2017-12-01 | 英特尔公司 | 顺序写入流管理 |
CN107430493B (zh) * | 2015-03-27 | 2023-10-03 | 英特尔公司 | 顺序写入流管理 |
CN105045894B (zh) * | 2015-07-31 | 2018-12-04 | 中国科学院计算技术研究所 | 一种面向分布式顺序表的缓存方法及系统 |
CN105740332A (zh) * | 2016-01-22 | 2016-07-06 | 北京京东尚科信息技术有限公司 | 数据排序方法和装置 |
CN106372121A (zh) * | 2016-08-23 | 2017-02-01 | 努比亚技术有限公司 | 服务器及数据处理方法 |
CN106372121B (zh) * | 2016-08-23 | 2020-03-17 | 努比亚技术有限公司 | 服务器及数据处理方法 |
CN107370797A (zh) * | 2017-06-30 | 2017-11-21 | 北京百度网讯科技有限公司 | 一种基于HBase的强有序队列操作的方法和装置 |
CN107370797B (zh) * | 2017-06-30 | 2021-07-27 | 北京百度网讯科技有限公司 | 一种基于HBase的强有序队列操作的方法和装置 |
CN107491314A (zh) * | 2017-08-30 | 2017-12-19 | 四川长虹电器股份有限公司 | 基于读写锁算法对hbase实时数据无障碍写处理方法 |
CN108228752A (zh) * | 2017-12-21 | 2018-06-29 | 中国联合网络通信集团有限公司 | 数据全量导出方法、数据分配装置及数据导出节点 |
CN110019168A (zh) * | 2017-12-26 | 2019-07-16 | 浙江宇视科技有限公司 | 文件合并方法和系统 |
CN110019168B (zh) * | 2017-12-26 | 2021-04-20 | 浙江宇视科技有限公司 | 文件合并方法和系统 |
CN108563698A (zh) * | 2018-03-22 | 2018-09-21 | 中国银联股份有限公司 | 一种HBase表的Region合并方法和装置 |
CN108563698B (zh) * | 2018-03-22 | 2021-11-23 | 中国银联股份有限公司 | 一种HBase表的Region合并方法和装置 |
US11372822B2 (en) | 2018-03-22 | 2022-06-28 | China Unionpay Co., Ltd. | Method, device, and computer apparatus for merging regions of HBase table |
WO2019179449A1 (zh) * | 2018-03-22 | 2019-09-26 | 中国银联股份有限公司 | 一种HBase表的Region合并方法、装置及计算机设备 |
CN113535721A (zh) * | 2018-08-31 | 2021-10-22 | 创新先进技术有限公司 | 一种数据写入方法及装置 |
CN110990394A (zh) * | 2018-09-28 | 2020-04-10 | 杭州海康威视数字技术股份有限公司 | 分布式面向列数据库表的行数统计方法、装置和存储介质 |
CN110990394B (zh) * | 2018-09-28 | 2023-10-20 | 杭州海康威视数字技术股份有限公司 | 分布式面向列数据库表的行数统计方法、装置和存储介质 |
CN110457279A (zh) * | 2019-07-11 | 2019-11-15 | 新华三大数据技术有限公司 | 数据离线扫描方法、装置、服务器及可读存储介质 |
CN110457279B (zh) * | 2019-07-11 | 2022-03-11 | 新华三大数据技术有限公司 | 数据离线扫描方法、装置、服务器及可读存储介质 |
CN111143363A (zh) * | 2019-12-23 | 2020-05-12 | 武汉光谷信息技术股份有限公司 | 一种基于HBase的3D Tiles数据的存取方法及装置 |
CN112084163A (zh) * | 2020-09-04 | 2020-12-15 | 珠海大横琴科技发展有限公司 | 一种数据写入方法、装置及计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN103631940B (zh) | 2017-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103631940A (zh) | 一种应用于hbase数据库的数据写入方法及系统 | |
CN103020174B (zh) | 相似性分析方法、装置及系统 | |
CN102332029B (zh) | 一种基于Hadoop 的海量可归类小文件关联存储方法 | |
CN105912687B (zh) | 海量分布式数据库存储单元 | |
CN102156738B (zh) | 数据块处理方法、数据块存储设备及系统 | |
CN101795211B (zh) | 一种数据存储方法及系统 | |
US20150134879A1 (en) | Snapshots and clones of volumes in a storage system | |
CN103761190B (zh) | 数据处理方法及装置 | |
US20160350302A1 (en) | Dynamically splitting a range of a node in a distributed hash table | |
CN104462389B (zh) | 基于分级存储的分布式文件系统实现方法 | |
CN105049260B (zh) | 日志管理方法和装置 | |
CN105787037B (zh) | 一种重复数据的删除方法及装置 | |
CN105159915A (zh) | 可动态适应的lsm树合并方法及系统 | |
US20130227237A1 (en) | Data management system and data management method | |
CN102314485A (zh) | 哈希表添加、查找和删除方法及装置 | |
CN103761053A (zh) | 一种数据处理方法和装置 | |
CN109947363A (zh) | 一种分布式存储系统的数据缓存方法 | |
CN106354805A (zh) | 一种分布式存储系统NoSQL搜索缓存的优化方法和系统 | |
CN103858125A (zh) | 重复数据处理方法、装置及存储控制器和存储节点 | |
CN109491589A (zh) | 一种基于文件内容的分层处理方法及装置 | |
CN113377292B (zh) | 一种单机存储引擎 | |
CN103473298A (zh) | 数据归档方法和装置以及存储系统 | |
CN108932271A (zh) | 一种文件管理方法及装置 | |
CN113094374A (zh) | 分布式存储和检索方法、装置及计算机设备 | |
CN100347705C (zh) | 一种合并文件的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |