一种HBase数据库的数据管理方法及系统的制作方法

文档序号:6538033阅读:182来源:国知局
一种HBase数据库的数据管理方法及系统的制作方法
【专利摘要】本发明公开一种HBase数据库的数据管理方法及系统,管理方法包括:响应数据写入请求,生成用于在HBase数据库中保存的待存储HBase记录;将所述待存储HBase记录中所包括的内容的大小超过预设字段阈值的字段作为大字段,提取所述大字段的内容生成大字段数据块;向保存在HDFS文件系统中的容器文件写入所述大字段数据块;将所述大字段数据块在所述HDFS文件系统中的位置作为索引,将所述待存储HBase记录中的大字段的内容替换为所述索引;在HBase中保存所述待存储HBase记录。本发明可以很好地发挥HBase及HDFS的优势,而回避HBase对大字段处理的不足,以及HDFS在存储小文件时资源消耗过大的不足,较好地满足了业务的需要,在实际应用中取得了良好的效果。
【专利说明】一种HBase数据库的数据管理方法及系统
【技术领域】
[0001]本发明涉及数据库相关【技术领域】,特别是一种HBase数据库的数据管理方法及系统。
【背景技术】
[0002]随着业务量的激增,IT运营系统需要处理的数据量与访问量也随之猛增,传统的以Oracle为代表的数据库解决方案因其效率低下、扩展性差等问题,已经远远不能满足用户的存储与查询需求,而逐渐让位于以HBase为代表的新一代分布式数据库。
[0003]HBase - Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase对大小在千字节级的记录可以很好的支持,但受其实现原理的限制,对业务中常见的记录与资料文件(如表格、文档、图片扫描件等,即是本发明所描述的大字段,典型大小从几百千字节到几十兆字节)联合存储,则不能很好的支持,会造成冗余磁盘文件读写、并发度不高、查询低效等问题。由于从业务角度来看,是以记录为主,文件内容是记录的一个组成部分,问题的实质是HBase记录中的某个或某些字段超出常规大小,故将其统称为HBase大字段存储问题。而针对此问题的传统解决方案有:大字段单独存储到磁盘、大字段单独存储到HDFS(Hadoop Distributed File System,简称HDFS,是一个分布式文件系统)都有各自的缺陷,而不能较好地从整体上解决上述问题。以下分别阐述每种方案的缺陷:
[0004]1.将文件内容作为业务记录中的一个字段,直接记录在HBase中。
[0005]这种方案会导致严重的HBase性能问题。
[0006]HBase服务端收到写入请求后,向表中写入数据时是先向内存中的缓存写入,一段时间后受触发才将数据写入HDFS (持久化)。因此HBase有重做日志,以实现在数据从写入缓存到写入HDFS之间服务器故障而导致内存中数据丢失的情况下,仍能从重做日志中恢复此部分数据。
[0007]重做日志的大小是有限的,当重做日志装满,就需要回收一部分重做日志,即把这部分重做日志中仍在内存的表数据写入HDFS实现持久化,这会导致这部分重做日志所涉及到的每个有未持久化数据的表的底层数据存储都增加一个文件,若文件超过一定数量,则会影响读写效率,而需要合并。通常情况下记录较小,重做日志装满需要较长时间,回收重做日志的频率较低,因回收重做日志而导致的文件合并操作是罕有的。然而在大字段的情况下,重做日志会很快装满,导致无关表的底层数据存储增加大量的小文件,并造成频繁的文件合并操作,极大影响HBase的性能。因此这种方案是不可行的。
[0008]2.文件单独存储在共享存储磁盘中,HBase业务记录中的一个字段记录文件的路径。
[0009]本方案的主要问题包括:用户操作复杂化且无事务保证、数据安全性低、系统可用性降低。
[0010]I)用户操作复杂化且无事务保证。[0011]在本方案中用户需要分别负责对HBase和共享存储的写入,增加了复杂度,而且这两步操作对用户来说是分离的,没有事务的原子性保证,也就是说如果用户在第一步操作完成后,第二步操作提交前,系统或网络发生故障,用户操作中断,系统就会处于不一致状态。
[0012]2)数据安全性降级
[0013]HBase和HDFS的数据存储原则是分布式冗余,在标准配置下能保证集群中任意两台服务器发生故障时数据不丢失。而共享存储通常没有这样的强安全性保证,又或者为了实现这样的安全性需要付出很高的硬件成本。
[0014]3)系统可用性降低
[0015]系统的主要组件是HBase,而HBase的数据存储是HDFS。本方案引入共享存储,若共享存储不能正常工作,整个系统也就无法运行,即是在系统中增加了一个可能出故障的组件,导致整个系统的可用性降低。
[0016]3.文件单独存储在HDFS中,HBase业务记录中的一个字段记录文件的路径。
[0017]本方案的主要问题包括:用户操作复杂化且无事务保证(与上一方案相同)、HDFS不适于存储小文件。
[0018]HDFS的实现是为大文件存储和处理优化,使用一个较大的内存数据结构保存每个文件的状态,如果存储的文件数过多,就会导致内存占用过大,而增加集群压力,降低集群性能。

【发明内容】

[0019]基于此,有必要针对现有技术在HBase数据库中,对大字段数据无法很好地存储和读取的技术问题,提供一种HBase数据库的数据管理方法及系统。
[0020]一种HBase数据库的数据管理方法,包括:
[0021]响应数据写入请求,生成用于在HBase数据库中保存的待存储HBase记录;
[0022]将所述待存储HBase记录中所包括的内容的大小超过预设字段阈值的字段作为大字段,提取所述大字段的内容生成大字段数据块;
[0023]向保存在HDFS文件系统中的容器文件写入所述大字段数据块;
[0024]将所述大字段数据块在所述HDFS文件系统中的位置作为索引,将所述待存储HBase记录中的大字段的内容替换为所述索引;
[0025]在HBase中保存所述待存储HBase记录。
[0026]一种HBase数据库的数据管理系统,包括:
[0027]数据写入请求响应模块,用于响应数据写入请求,生成用于在HBase数据库中保存的待存储HBase记录;
[0028]大字段数据块生成模块,用于将所述待存储HBase记录中所包括的内容的大小超过预设字段阈值的字段作为大字段,提取所述大字段的内容生成大字段数据块;
[0029]大字段数据块写入模块,用于向保存在HDFS文件系统中的容器文件写入所述大字段数据块;
[0030]待存储HBase记录替换模块,用于将所述大字段数据块在所述HDFS文件系统中的位置作为索引,将所述待存储HBase记录中的大字段的内容替换为所述索引;[0031 ] 待存储HBase记录保存模块,用于在HBase中保存所述待存储HBase记录。
[0032]本发明为了解决HBase数据库不能很好地处理包含大字段的大量记录的问题,通过结合HBase和HDFS两者的优点,把HBase记录与影响HBase性能的大字段在物理存储层面分离,把大字段的内容保存在HDFS的容器文件中,在HBase中实际保存的数据是大字段的索引而非大字段本身。从而可以很好地发挥HBase对记录处理的高响应时间、高吞吐量、高并发度的优势,而回避HBase对大字段处理的不足。每个容器文件中可存储多个大字段内容(应用中可达到亿级),实现索引机制,可通过索引迅速定位一个大字段在容器文件中的具体位置并读取。由于整个替换工作是在数据写入HBase数据库的过程中执行,因此是一个完整的原子操作,保证了用户写数据操作的易用性、原子性和数据一致性。另外,将多个大字段打包存储在系统的必备组件HDFS的容器文件中,以发挥HDFS存储大文件的高容量、高可靠性、高传输率、高并发度的优势,而回避HDFS在存储小文件时资源消耗过大的不足。本发明较好地满足了业务的需要,在实际应用中取得了良好的效果。
【专利附图】

【附图说明】
[0033]图1为本发明一种HBase数据库的数据管理方法的工作流程图;
[0034]图2为本发明一个例子的大字段的数据存储结构图;
[0035]图3为本发明一个例子的结构示意图;
[0036]图4为本发明一种HBase数据库的数据管理系统的结构模块图。
【具体实施方式】
[0037]下面结合附图和具体实施例对本发明做进一步详细的说明。
[0038]如图1所示为本发明一种HBase数据库的数据管理方法的工作流程图,包括:
[0039]步骤S101,响应数据写入请求,生成用于在HBase数据库中保存的待存储HBase记录;
[0040]步骤S102,将所述待存储HBase记录中所包括的内容的大小超过预设字段阈值的字段作为大字段,提取所述大字段的内容生成大字段数据块;
[0041]步骤S103,向保存在HDFS文件系统中的容器文件写入所述大字段数据块;
[0042]步骤S104,将所述大字段数据块在所述HDFS文件系统中的位置作为索引,将所述待存储HBase记录中的大字段的内容替换为所述索引;
[0043]步骤S105,在HBase中保存所述待存储HBase记录。
[0044]当用户请求向HBase数据库写入数据时,系统首先执行步骤S101,然后,在步骤S102将大字段的内容从HBase记录中提取出来作为大字段数据块,步骤S103则将大字段数据块写入HDFS中的容器文件,步骤S104则生成用于记录该大字段数据块在HDFS文件系统中的位置的索引,并替换到HBase记录中,在步骤S105将替换后的HBase记录写入HBase数据库。这样在HBase中实际保存的数据就成了大字段的索引而非大字段本身,从而减小HBase的负担,提高HBase性能。同时,在HDFS中保存的是包括多个大字段数据块的容器文件,因此,HDFS也无需处理小文件,从而在整体上克服了现有技术在HBase数据库中,对大字段数据无法很好地管理的技术问题,提高HBase性能。
[0045]其中向HBase数据库写入是通过HBase的Coprocessor机制实现的。Coprocessor机制是HBase制定的用于扩展其功能的组件开发规范,本例子根据该规范,开发出了一个符合规范的Coprocessor,可以嵌到HBase系统中,实现本文档所描述功能的,下文中如无特殊说明,则Coprocessor —词专指上述实现本例子所描述功能的Coprocessor。
[0046]如图2所示为一个例子的大字段的数据存储结构图,在HBase数据库21中的
HBase表211中的一条HBase记录中包括多个字段2111、2112、......、211n,而其中内容的
大小超过预设字段阈值的字段作为大字段,如大字段211i,将大字段211i的内容提取并放到HDFS文件系统22的其中一个容器文件221中,在大字段数据块2211、大字段数据块2212、……的最后加入,成为大字段数据块221i。
[0047]大字段在记录中的分离是在HBase服务端完成,对用户是透明的。
[0048]在其中一个实施例中,所述索引包括所述容器文件的文件名,以及所述大字段数据块在所述容器文件中的偏移量。
[0049]通过容器文件的文件名则可以定位到对应的容器文件,然后根据偏移量(从容器文件开始算起的字节数)以及长度。通过这些信息可以唯一定位到一个大字段数据块,从而为以后的读取提供便利。
[0050]在其中一个实施例中,所述提取所述大字段的内容生成大字段数据块,具体包括:
[0051]新建一个包括起始标志的大字段数据块; [0052]获取所述大字段所在的待存储HBase记录的至少一个属性,并在所述大字段数据块保存;
[0053]提取所述大字段的内容,并在所述大字段数据块保存;
[0054]获取所述大字段数据块在容器文件中的序号,并在所述大字段数据块保存;
[0055]获取所述大字段数据块的大小,并在所述大字段数据块保存;
[0056]生成对所述大字段数据块的校验码,并在所述大字段数据块保存。容器文件是以表_列族-RegionServer为维度进行组织,一个表中的一个列族在每台RegionServer上对应一个容器文件组,即是说由该RegionServer执行的向一个表的一个列族中插入包含大字段的记录的所有请求,其大字段数据会写入到同一个HDFS容器文件组中。一个容器文件组中包含多个容器文件,这多个容器文件是随着大字段的写入和单文件长度的增长,由容器文件切分策略控制分割而逐渐增加的。每个容器文件组中的文件是顺序生成的,同一时刻只有最新的文件可以写入,该文件即是当前文件。当RegionSever重新启动时,会建立新的容器文件。
[0057]目前容器文件切分策略有两种:根据文件大小,即是在当前文件大小超过指定值时创建一个新文件;或是根据文件产生时长,即是一个文件从创建算起,超过指定时长后创建一个新文件。这两种策略也可以结合起来同时应用。
[0058]一个容器文件中可容纳多个大字段,每个大字段的内容及其辅助信5息组织成一段连续的字节流,以连续追加写入的方式写入容器文件。每个大字段的内容写入容器文件的字节流称为一个大字段数据块,在本发明一个例子中,大字段数据块分为三个区域:头部、主体和尾部。每个区域的具体信息如下表所述:
【权利要求】
1.一种HBase数据库的数据管理方法,其特征在于,包括: 响应数据写入请求,生成用于在HBase数据库中保存的待存储HBase记录; 将所述待存储HBase记录中所包括的内容的大小超过预设字段阈值的字段作为大字段,提取所述大字段的内容生成大字段数据块; 向保存在HDFS文件系统中的容器文件写入所述大字段数据块; 将所述大字段数据块在所述HDFS文件系统中的位置作为索引,将所述待存储HBase记录中的大字段的内容替换为所述索引; 在HBase中保存所述待存储HBase记录。
2.根据权利要求1所述的HBase数据库的数据管理方法,其特征在于,所述索引包括所述容器文件的文件名,以及所述大字段数据块在所述容器文件中的偏移量。
3.根据权利要求1所述的HBase数据库的数据管理方法,其特征在于,还包括: 响应数据读取请求,从HBase数据库中获取所请求的待读取HBase记录; 如果所述待读取HBase记录的字段中包含有所述索引,则所述索引作为待读取索引,根据所述待读取索引从所述HDFS文件系统中获取对应的大字段数据块作为待读取大字段数据块; 在所述待读取HBase记 录中,将从所述待读取大字段数据块中提取的大字段的内容替换对应的所述待读取索引; 返回所述待读取HBase记录。
4.根据权利要求1所述的HBase数据库的数据管理方法,其特征在于,还包括: 获取所述HBase数据库中的所有HBase记录中的索引作为待紧缩索引; 从所述HDFS文件系统中的容器文件中选择待紧缩容器文件; 将包括有所述待紧缩索引对应的大字段数据块的待紧缩容器文件作为原容器文件,对所述原容器文件执行紧缩操作; 所述紧缩操作包括: 将原容器文件中所述待紧缩索引对应的大字段数据块迁移到新建立的容器文件中,并获取每个所述待紧缩索引对应的大字段数据块在新建立的容器文件中的索引作为紧缩后索引; 将所述待紧缩索引替换为对应的紧缩后索引; 删除所述原容器文件。
5.根据权利要求4所述的HBase数据库的数据管理方法,其特征在于,所述从所述HDFS文件系统中的容器文件中选择待紧缩容器文件,具体包括: 将所述待紧缩索引根据容器文件分组,统计出每个容器文件的所包括与所述待紧缩索引对应的大字段数据块的数量,作为每个容器文件的有效大字段数据块数量; 获取每个容器文件中所包括的大字段数据块的数量,作为每个容器文件的总大字段数; 将有效大字段数据块数量占总大字段数的比例小于预设比例阈值的容器文件作为待紧缩容器文件。
6.一种HBase数据库的数据管理系统,其特征在于,包括: 数据写入请求响应模块,用于响应数据写入请求,生成用于在HBase数据库中保存的待存储HBase记录; 大字段数据块生成模块,用于将所述待存储HBase记录中所包括的内容的大小超过预设字段阈值的字段作为大字段,提取所述大字段的内容生成大字段数据块; 大字段数据块写入模块,用于向保存在HDFS文件系统中的容器文件写入所述大字段数据块; 待存储HBase记录替换模块,用于将所述大字段数据块在所述HDFS文件系统中的位置作为索引,将所述待存储HBase记录中的大字段的内容替换为所述索引; 待存储HBase记录保存模块,用于在HBase中保存所述待存储HBase记录。
7.根据权利要求6所述的HBase数据库的数据管理系统,其特征在于,所述索引包括所述容器文件的文件名,以及所述大字段数据块在所述容器文件中的偏移量。
8.根据权利要求6所述的HBase数据库的数据管理系统,其特征在于,还包括: 数据读取请求响应模块,用于响应数据读取请求,从HBase数据库中获取所请求的待读取HBase记录; 待读取大字段数据块获取模块,用于如果所述待读取HBase记录的字段中包含有所述索引,则所述索引作为待读取索引,根据所述待读取索引从所述HDFS文件系统中获取对应的大字段数据块作为待读取大字段数据块; 待读取HBase记录替换模块,用于在所述待读取HBase记录中,将从所述待读取大字段数据块中提取的大字段的内容替换对应的所述待读取索引; 待读取HBase记录返回模块,用于返回所述待读取HBase记录。
9.根据权利要求6所述的HBase数据库的数据管理系统,其特征在于,还包括: 待紧缩索引获取模块,用于获取所述HBase数据库中的所有HBase记录中的索引作为待紧缩索引; 待紧缩容器文件选择模块,用于从所述HDFS文件系统中的容器文件中选择待紧缩容器文件; 紧缩操作模块,用于将包括有所述待紧缩索引对应的大字段数据块的待紧缩容器文件作为原容器文件,对所述原容器文件执行紧缩操作; 所述紧缩操作包括: 将原容器文件中所述待紧缩索引对应的大字段数据块迁移到新建立的容器文件中,并获取每个所述待紧缩索引对应的大字段数据块在新建立的容器文件中的索引作为紧缩后索引; 将所述待紧缩索引替换为对应的紧缩后索引; 删除所述原容器文件。
10.根据权利要求9所述的HBase数据库的数据管理系统,其特征在于,所述待紧缩容器文件选择模块,具体用于: 将所述待紧缩索引根据容器文件分组,统计出每个容器文件的所包括与所述待紧缩索引对应的大字段数据块的数量,作为每个容器文件的有效大字段数据块数量; 获取每个容器文件中所包括的大字段数据块的数量,作为每个容器文件的总大字段数;将有效大字段数据块数量占总大字段数的比例小于预设比例阈值的容器文件作为待紧缩容器文件。
【文档编号】G06F17/30GK103838830SQ201410055361
【公开日】2014年6月4日 申请日期:2014年2月18日 优先权日:2014年2月18日
【发明者】钟坚, 何广柏, 邹国栋, 张伟, 王腾, 石巍, 赖志坚 申请人:广东亿迅科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1