CN107491314A - 基于读写锁算法对hbase实时数据无障碍写处理方法 - Google Patents
基于读写锁算法对hbase实时数据无障碍写处理方法 Download PDFInfo
- Publication number
- CN107491314A CN107491314A CN201710765083.7A CN201710765083A CN107491314A CN 107491314 A CN107491314 A CN 107491314A CN 201710765083 A CN201710765083 A CN 201710765083A CN 107491314 A CN107491314 A CN 107491314A
- Authority
- CN
- China
- Prior art keywords
- write
- read
- hbase
- data
- lock
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- 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/24552—Database cache management
-
- 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/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于读写锁算法对HBASE实时数据无障碍写处理方法,方法步骤如下,(1)通过内部包禁止HBase合并、分裂;(2)定义全局变量:(3)构造器;(4)写处理:写数据时加写入锁,将数据存放到client缓冲列表中,完成释放写入锁;(5)读处理:读数据时加读取锁,提交数据到HBASE服务器端,完成释放读取锁;(6)启动线程。与现有技术相比,本发明采用JAVA编程语言利用其中的读写锁算法,客户端定义自动刷新提交为False,缓冲列表获得写锁存放数据,启用定时任务获得读锁调用HBase API实现数据的提交,解决了高并发实时写数据消费太慢队列产生大量数据堆积的问题。
Description
技术领域
本发明涉及一种计算机软件编程应用领域,尤其涉及一种基于读写锁算法对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,缓冲列表获得写锁存放数据,启用定时任务获得读锁调用HBase API实现数据的提交。更好的解决了高并发实时写数据消费太慢队列产生大量数据堆积的问题,而且本发明不用增加额外的配置或成本。
附图说明
图1、图2为现有的HBASE写数据的方法的流程图;
图3为本发明通过加读写锁对实时数据写数据到HBASE库的流程图;
图4为实施例中存数据加写入锁算法的流程图;
图5为实施例中读数据(即提交数据)加读取锁算法的流程图。
图6为实施例中多线程从队列消费写数据的最终的示意图。
具体实施方式
下面将对本发明作进一步说明。
实施例1:一种基于读写锁算法对HBASE实时数据无障碍写处理方法,如图3所示,该方法具体包括如下步骤:
采用JAVA编程语言利用其中的读写锁算法,客户端定义自动刷新提交为false,缓冲列表获得写锁存放数据,启用定时任务获得读锁调用HBase API实现数据的提交。
1)通过内部包禁止HBase合并、分裂禁止合并,配置hbase.hregion.majorcompaction值设为0,不执行合并(默认1天执行一次合并);禁止分裂,配置hbase.hregion.max.filesize值设为500G,配置项的含义是当region的大小大于设定值后hbase就会开始split,在白天系统繁忙时一个region不会超过此大小。在晚上空闲时运行定时任务手动将region进行合并分裂。
2)声明全局变量:缓冲列表List<Put>puts、表对应连接Map<String,HTableInterface>map、表对应缓冲数据Map<String,List<Put>>pMap、读写锁ReadWriteLockrwl、表名tableName、表连接htable、HBASE库连接conn等等。
3)构造器:初始化表连接,如果map中默认表连接不存在,获取对应表连接,并设置自动提交为false,将表及连接对应关系存入map中;
4)客户端具体的存数据加写入锁算法,如图4所示。
根据表名tablename、行记录数据Map<String,Map<String,Map<String,String>>>rowKeyMap构建写方法。判断rowKeyMap是否为空,为空不作处理,不为空判断hbase库连接conn是否为空,为空则获取连接,若连接异常作自动重连处理直到连接成功。遍历行记录数据rowKeyMap,预设列簇变量Map<String,Map<String,String>>faimilyMap,实例化Putput=new Put(rowkey),并设置setWriteToWAL参数为false,遍历rowkey对应列簇、列封装。增加写入锁rwl.writeLock().lock();判断传入参数tablename是否与定义的默认表名tableName相等,若不等赋值tableName等于传入参数tablename。从表对应连接map中获取tableName是否为空值null,若是则从conn库连接获取tableName表的连接赋值给htable连接,并设置AutoFlush为false,再将tableName表作为key,htable连接作为value加入到map中。不存在则初始化创建缓冲列表List<Put>puts=newArrayList<Put>(),将put加入puts中,添加<tablename,puts>到表对应缓冲数据pMap中;若tablename表对应缓冲数据存在则直接根据key为tablename的表名从pMap中获取缓冲列表变量追加put。最后释放写入锁rwl.writeLock().unlock(),再进入下一个循环。
4)读数据加读取锁算法,流程图如图5所示。
构造写方法,增加读取锁rwl.readLock().lock(),当表对应缓冲数据pMap的size不等于0时,遍历每张表对应的缓冲数据,定义局部变量tablename赋值为pMap中对应key的值作为表名,定义局部变量puts赋值为pMap中对应value值作为缓冲数据,定义局部变量htable赋值为从表对应连接map中获取tablename的表连接,将变量puts存放到htable中,执行flushCommits;遍历结束,清空全局变量缓冲列表puts、表对应缓冲数据pMap;
释放读取锁rwl.readLock().unlock()。
5)启动线程,每隔1秒执行一次读处理;
6)以上为一个线程处理,
还能通过多线程队列消费者数据,如图6,多个线程分别从数据流中获取数据,同时进行多个上述单线程作业,最终将数据并分别写入Hbase库中。
本发明通过JAVA语言读写锁原理,写数据时(即放数据)加写入锁,将数据存放到client缓冲列表中,完成释放写入锁;读数据时(即提交数据到HBASE服务器)加读取锁,提交数据到HBASE服务器端,完成释放读取锁,在释放该读取锁之前,不能再持有写入锁;实现了实时对HBASE无障碍写数据。适用于对HBASE非关系型数据库实时数据无障碍写处理,所解决的技术问题是高并发实时写数据队列消费太慢产生大量的数据堆积问题。
以上对本发明所提供的一种基于读写锁算法对HBASE实时数据无障碍写处理方法进行了详尽介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,对本发明的变更和改进将是可能的,而不会超出附加权利要求所规定的构思和范围,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (9)
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服务器;读写锁rwl作为写处理加写入锁,读处理加读取锁控制。
5.根据权利要求1所述基于读写锁算法对HBASE实时数据无障碍写处理方法,其特征在于:步骤2中,变量声明还包括默认表名tableName、表连接htable、HBASE库连接conn。
6.根据权利要求1所述基于读写锁算法对HBASE实时数据无障碍写处理方法,其特征在于:步骤4、步骤5中,采用JAVA编程语言中读写锁算法,实现对HBASE实时数据无障碍的写处理。
7.根据权利要求6所述基于读写锁算法对HBASE实时数据无障碍写处理方法,其特征在于:步骤4中进行写处理,即获取写入锁,向缓冲列表中无障碍写数据,再释放写入锁;若当HBASE正在提交缓冲中数据时则处于读取锁状态不可写,等待读取锁释放后,获得写入锁再向缓冲中无障碍写数据,再释放写入锁。
8.根据权利要求6所述基于读写锁算法对HBASE实时数据无障碍写处理方法,其特征在于:步骤5读处理,即将表对应缓冲数据中缓冲列表puts数据提交到HBASE服务器端的操作,获取读取锁;当表对应缓冲数据存在记录时,通过表对应连接获取该表连接,再刷新提交相应的缓冲列表变量,接着清空对应的缓冲列表变量puts、表对应缓冲数据pMap,再释放读取锁。
9.根据权利要求1-8任意一项权利要求所述的基于读写锁算法对HBASE实时数据无障碍写处理方法,其特征在于:还能根据多线程队列消费者数据进行多线程同时作业。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710765083.7A CN107491314A (zh) | 2017-08-30 | 2017-08-30 | 基于读写锁算法对hbase实时数据无障碍写处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710765083.7A CN107491314A (zh) | 2017-08-30 | 2017-08-30 | 基于读写锁算法对hbase实时数据无障碍写处理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107491314A true CN107491314A (zh) | 2017-12-19 |
Family
ID=60651134
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710765083.7A Pending CN107491314A (zh) | 2017-08-30 | 2017-08-30 | 基于读写锁算法对hbase实时数据无障碍写处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107491314A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108429665A (zh) * | 2018-03-22 | 2018-08-21 | 四川长虹电器股份有限公司 | 一种并发通信传输数据的方法 |
WO2022160743A1 (zh) * | 2021-01-29 | 2022-08-04 | 稿定(厦门)科技有限公司 | 视频文件播放系统、音视频播放流程、存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100161564A1 (en) * | 2008-12-18 | 2010-06-24 | Electronics And Telecommunications Research Institute | Cluster data management system and method for data recovery using parallel processing in cluster data management system |
CN103631940A (zh) * | 2013-12-09 | 2014-03-12 | 中国联合网络通信集团有限公司 | 一种应用于hbase数据库的数据写入方法及系统 |
CN103914565A (zh) * | 2014-04-21 | 2014-07-09 | 北京搜狐新媒体信息技术有限公司 | 一种向数据库插入数据的方法及装置 |
CN104537003A (zh) * | 2014-12-16 | 2015-04-22 | 北京中交兴路车联网科技有限公司 | 一种Hbase数据库的通用高性能数据写入方法 |
CN105005617A (zh) * | 2015-07-21 | 2015-10-28 | 领航动力信息系统有限公司 | 一种时间序列数据的存储方法及装置 |
CN105446893A (zh) * | 2014-07-14 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 数据存储方法及设备 |
-
2017
- 2017-08-30 CN CN201710765083.7A patent/CN107491314A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100161564A1 (en) * | 2008-12-18 | 2010-06-24 | Electronics And Telecommunications Research Institute | Cluster data management system and method for data recovery using parallel processing in cluster data management system |
CN103631940A (zh) * | 2013-12-09 | 2014-03-12 | 中国联合网络通信集团有限公司 | 一种应用于hbase数据库的数据写入方法及系统 |
CN103914565A (zh) * | 2014-04-21 | 2014-07-09 | 北京搜狐新媒体信息技术有限公司 | 一种向数据库插入数据的方法及装置 |
CN105446893A (zh) * | 2014-07-14 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 数据存储方法及设备 |
CN104537003A (zh) * | 2014-12-16 | 2015-04-22 | 北京中交兴路车联网科技有限公司 | 一种Hbase数据库的通用高性能数据写入方法 |
CN105005617A (zh) * | 2015-07-21 | 2015-10-28 | 领航动力信息系统有限公司 | 一种时间序列数据的存储方法及装置 |
Non-Patent Citations (2)
Title |
---|
BLACKPROOF: "hbase性能调试", 《HTTPS://WWW.ITEYE.COM/BLOG/BLACKPROOF-2075660》 * |
DUANXZ: "HBase之七:事务和并发控制机制原理", 《HTTPS://WWW.CNBLOGS.COM/DUANXZ/P/4513631.HTML》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108429665A (zh) * | 2018-03-22 | 2018-08-21 | 四川长虹电器股份有限公司 | 一种并发通信传输数据的方法 |
CN108429665B (zh) * | 2018-03-22 | 2020-12-15 | 四川长虹电器股份有限公司 | 一种并发通信传输数据的方法 |
WO2022160743A1 (zh) * | 2021-01-29 | 2022-08-04 | 稿定(厦门)科技有限公司 | 视频文件播放系统、音视频播放流程、存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2016244128B2 (en) | Processing database transactions in a distributed computing system | |
US7657500B2 (en) | Concurrent extensible cuckoo hashing | |
US6105026A (en) | Multi-phase locking for partition maintenance operations | |
US9171023B2 (en) | Mechanism for updates in a database engine | |
US8176022B1 (en) | Locking protocol using dynamic locks and dynamic shared memory | |
CN110674154A (zh) | 一种基于Spark的对Hive中数据进行插入、更新和删除的方法 | |
JP2001527242A (ja) | ロックグループを用いた楽観的並行処理制御のためのきめ細やかな整合性をもたらす仕組み | |
CN111198872B (zh) | 数据库处理事务的方法及装置 | |
CN105550246B (zh) | Android平台下加载网络图片的系统及方法 | |
CN107491314A (zh) | 基于读写锁算法对hbase实时数据无障碍写处理方法 | |
CN112867999B (zh) | 基于版本的表锁定 | |
US7707194B2 (en) | Interface to lock a database row through a logical locking interface | |
CN104601562A (zh) | 游戏服务器与数据库的交互方法和系统 | |
US20080319878A1 (en) | Dynamic Time Series Update Method | |
CN104123356A (zh) | 一种大数据量下提高网页响应的方法 | |
US10650021B2 (en) | Managing data operations in an integrated database system | |
US11741081B2 (en) | Method and system for data handling | |
CN105740293B (zh) | 数据导出方法和装置 | |
US11392576B2 (en) | Distributed pessimistic lock based on HBase storage and the implementation method thereof | |
US11372898B2 (en) | Security of a computer system | |
CN109857742B (zh) | 一种大数据虚拟表格快速显示方法及系统 | |
CN109376097B (zh) | 解决多微引擎的哈希查找学习及地址老化冲突的方法 | |
CN112749176A (zh) | 库存数据的同步处理方法及装置、存储介质、服务器 | |
US20070101314A1 (en) | Compiling join patterns using software transactional memories | |
CN107239517A (zh) | 基于Hbase数据库的多条件搜索方法及装置 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171219 |
|
RJ01 | Rejection of invention patent application after publication |