基于读写锁算法对HBASE实时数据无障碍写处理方法技术

技术编号:16837076 阅读:15 留言:0更新日期:2017-12-19 19:43
本发明专利技术公开了一种基于读写锁算法对HBASE实时数据无障碍写处理方法,方法步骤如下,(1)通过内部包禁止HBase合并、分裂;(2)定义全局变量:(3)构造器;(4)写处理:写数据时加写入锁,将数据存放到client缓冲列表中,完成释放写入锁;(5)读处理:读数据时加读取锁,提交数据到HBASE服务器端,完成释放读取锁;(6)启动线程。与现有技术相比,本发明专利技术采用JAVA编程语言利用其中的读写锁算法,客户端定义自动刷新提交为False,缓冲列表获得写锁存放数据,启用定时任务获得读锁调用HBase API实现数据的提交,解决了高并发实时写数据消费太慢队列产生大量数据堆积的问题。

An obstacle free write processing method for HBASE real-time data based on read write lock algorithm

The invention discloses a read-write lock algorithm on the HBASE real-time data processing method based on barrier free writing, method steps are as follows: (1) to ban HBase merger, split by internal package; (2) the definition of global variables: (3) constructor; (4): write write data and write lock will be stored the data into the client buffer list, complete the release into the lock; (5) read: read data processing with read locks to submit data to the HBASE server, complete release read locks; (6) to start a thread. Compared with the prior art, the invention adopts JAVA programming language which is used to read and write lock algorithm, the client definition automatically refresh submitted for False buffer, obtain a list of write locks to store the data, enable timing tasks read lock call HBase API data submitted, solve the high concurrent real-time write data queue is too slow to generate large amounts of data consumption packing problem.

【技术实现步骤摘要】
基于读写锁算法对HBASE实时数据无障碍写处理方法
本专利技术涉及一种计算机软件编程应用领域,尤其涉及一种基于读写锁算法对HBASE实时数据无障碍写处理方法。
技术介绍
在使用HBASE过程中发现在写入HBASE的数据量很大时,经常发生写不进去的情况,使生产队列产生大量的数据堆积。而我们基于HBASE的应用是对实时性要求很高的,一旦HBASE不能读写则会大大影响系统的使用。目前HBASE多线程写的方式有:1)client端使用了setAutoFlush(false)以及缓存的大小XMB,当table达到XMB的时候才能自动flushCommit;若批量提交时,可设置每隔N条提交一次;2)client端使用了setAutoFlush(false)以及异步定时刷新提交;这两种方法的缺点是:方式1对于实时性数据不能及时提交;方式2线程不安全,当flushCommit的同时,会有其他线程对这个table进行写入。在对HBASE实时性数据处理要求很高的情况下,这两种方法均不能很好地满足在开发过程向HBASE数据库无障碍写数据的要求。如图1、图2所示,现有的HBASE写数据方法是数据达到预设的缓存大小刷新提交到服务器。图l表示按缓存大小提交,图2是按时间刷新提交,这时,当异步刷新提交数据则需要控制写入安全。为了更好的解决写数据消费太慢队列产生大量数据堆积,因此需要建立一种针对HBASE高并发实时写数据的方法.
技术实现思路
本专利技术的目的就在于提供一种解决了高并发下对非关系型数据库实时写数据队列消费太慢产生大量数据堆积的问题,基于JAVA语言读写锁算法实现对HBASE无障碍写处理方法,通过JAVA语言生成读写锁算法,实时对HBASE无障碍写数据。为了实现上述目的,本专利技术采用的技术方案是:一种基于读写锁算法对HBASE实时数据无障碍写处理方法:(1)通过内部包禁止HBase合并、分裂;(2)定义全局变量:缓冲列表List<Put>puts、表对应连接Map<String,HTableInterface>map、表对应缓冲数据Map<String,List<Put>>pMap、读写锁ReadWriteLockrwl;所述缓冲列表puts作为客户端写处理缓冲池,前提是获得写入锁即可无限制写入;表对应连接map作为读处理操作相应缓冲数据pMap提交到HBASE服务器;读写锁rwl作为写处理加写入锁,读处理加读取锁控制。变量声明还包括一些默认表名tableName、表连接htable、HBASE库连接conn等等。(3)构造器:初始化表连接,初始化库连接conn,判断map中默认表连接是否存在,不存在则获取htable连接,并添加到表对应连接map<tableName,htable>中(4)写处理:写数据时(即放数据)加写入锁,将数据存放到client缓冲列表中,完成释放写入锁;获取写入锁,向缓冲列表中无障碍写数据,再释放写入锁;若当HBASE正在提交缓冲中数据时则处于读取锁状态不可写,等待读取锁释放后,获得写入锁再向缓冲中无障碍写数据,再释放写入锁。(5)读处理:读数据时(即提交数据到HBASE服务器)加读取锁,提交数据到HBASE服务器端,完成释放读取锁;即将表对应缓冲数据pMap中缓冲列表puts数据提交到HBASE服务器端的操作。获取读取锁,当表对应缓冲数据pMap存在记录时,通过map获取该表连接,再flushCommits相应的缓冲列表变量puts,接着清空对应的缓冲列表变量puts、表对应缓冲数据pMap,再释放读取锁;(6)启动线程,每隔1秒执行一次读处理。作为优选,在空闲时运行定时任务手动将region进行合并分裂;定义全局变量缓冲列表puts、表对应连接map、表对应缓冲数据pMap、读写锁rwl;构造器初始化表连接。作为优选,步骤1中,设置hbase默认不执行合并、region分裂块大小足够大。作为优选,步骤4、步骤5中,采用JAVA编程语言中读写锁算法,实现对HBASE实时数据无障碍的写处理。作为优选,还能根据多线程队列消费者数据进行多线程同时作业作为优选,步骤4中进行写处理,即获取写入锁,向缓冲列表中无障碍写数据,再释放写入锁;若当HBASE正在提交缓冲中数据时则处于读取锁状态不可写,等待读取锁释放后,获得写入锁再向缓冲中无障碍写数据,再释放写入锁。写处理的构造写法如下:首先根据表名tablename、行记录数据Map<String,Map<String,Map<String,String>>>rowKeyMap构建写方法,首先检查rowKeyMap是否存在记录;存在检查库连接是否空值,如果异常则自动重连直到成功;遍历循环记录并封装行、列簇、列值;增加写入锁;检查传入参数tablename表连接是否存在,不存在则获取表连接;再检查tablename表对应缓冲数据是否已经存在,不存在则初始化创建缓冲列表变量放入行数据,存在则直接从表对应缓冲数据pMap中以tablename作为key获取缓冲列表变量追加行数据;最后释放写入锁,再进入下一个循环。作为优选,步骤5读处理,即将表对应缓冲数据中缓冲列表puts数据提交到HBASE服务器端的操作,获取读取锁;当表对应缓冲数据存在记录时,通过表对应连接获取该表连接,再刷新提交相应的缓冲列表变量,接着清空对应的缓冲列表变量puts、表对应缓冲数据pMap,再释放读取锁。读处理的构造写法如下:增加读取锁,当表对应缓冲数据pMap的size不等于0时,遍历每张表对应的缓冲数据,定义局部变量tablename赋值为pMap中对应key的值作为表名,定义局部变量puts赋值为pMap中对应value值作为缓冲数据,定义局部变量htable赋值为从表对应连接map中获取tablename的表连接,将变量puts存放到htable中,执行flushCommits;遍历结束,清空全局变量缓冲列表puts、表对应缓冲数据pMap;释放读取锁。与现有技术相比,本专利技术的优点在于:本专利技术采用JAVA编程语言利用其中的读写锁算法,客户端定义自动刷新提交为False,缓冲列表获得写锁存放数据,启用定时任务获得读锁调用HBaseAPI实现数据的提交。更好的解决了高并发实时写数据消费太慢队列产生大量数据堆积的问题,而且本专利技术不用增加额外的配置或成本。附图说明图1、图2为现有的HBASE写数据的方法的流程图;图3为本专利技术通过加读写锁对实时数据写数据到HBASE库的流程图;图4为实施例中存数据加写入锁算法的流程图;图5为实施例中读数据(即提交数据)加读取锁算法的流程图。图6为实施例中多线程从队列消费写数据的最终的示意图。具体实施方式下面将对本专利技术作进一步说明。实施例1:一种基于读写锁算法对HBASE实时数据无障碍写处理方法,如图3所示,该方法具体包括如下步骤:采用JAVA编程语言利用其中的读写锁算法,客户端定义自动刷新提交为false,缓冲列表获得写锁存放数据,启用定时任务获得读锁调用HBaseAPI实现数据的提交。1)通过内部包禁止HBase合并、分裂禁止合并,配置hbase.hregion.m本文档来自技高网...
基于读写锁算法对HBASE实时数据无障碍写处理方法

【技术保护点】
一种基于读写锁算法对HBASE实时数据无障碍写处理方法,其特征在于:方法步骤如下,(1)通过内部包禁止HBase合并、分裂;(2)定义全局变量:缓冲列表puts、表对应连接map、表对应缓冲数据pMap、读写锁rwl;(3)构造器:初始化表连接,如果map中默认表连接不存在,获取对应表连接,并设置自动提交为false,将表及连接对应关系存入map中;(4)写处理:写数据时加写入锁,将数据存放到client缓冲列表中,完成释放写入锁;(5)读处理:读数据时加读取锁,提交数据到HBASE服务器端,完成释放读取锁;(6)启动线程,每隔1秒执行一次读处理。

【技术特征摘要】
1.一种基于读写锁算法对HBASE实时数据无障碍写处理方法,其特征在于:方法步骤如下,(1)通过内部包禁止HBase合并、分裂;(2)定义全局变量:缓冲列表puts、表对应连接map、表对应缓冲数据pMap、读写锁rwl;(3)构造器:初始化表连接,如果map中默认表连接不存在,获取对应表连接,并设置自动提交为false,将表及连接对应关系存入map中;(4)写处理:写数据时加写入锁,将数据存放到client缓冲列表中,完成释放写入锁;(5)读处理:读数据时加读取锁,提交数据到HBASE服务器端,完成释放读取锁;(6)启动线程,每隔1秒执行一次读处理。2.根据权利要求1所述基于读写锁算法对HBASE实时数据无障碍写处理方法,其特征在于:在空闲时,运行定时任务手动将region进行合并分裂;定义全局变量缓冲列表puts、表对应连接map、表对应缓冲数据pMap、读写锁rwl;构造器初始化表连接。3.根据权利要求1所述基于读写锁算法对HBASE实时数据无障碍写处理方法,其特征在于:步骤1中,设置hbase默认不执行合并、region分裂块大小足够大。4.根据权利要求1所述基于读写锁算法对HBASE实时数据无障碍写处理方法,其特征在于:步骤2中,所述缓冲列表puts作为客户端写处理缓冲池,前提是获得写入锁即可无限制写入;表对应连接map作为读处理操作相应缓冲数据pMap提交到HBASE服务...

【专利技术属性】
技术研发人员:熊坪
申请(专利权)人:四川长虹电器股份有限公司
类型:发明
国别省市:四川,51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1