基于HBase的海量数据存储和快速检索

2019-05-24 14:11谢地王同喜
电脑知识与技术 2019年4期
关键词:海量分布式

谢地 王同喜

摘要:随着科技的发展,越来越多的信息需要被存储到数据库中。传统的数据库逐渐不能存储海量的数据,如何储存海量数据是一个值得关注的问题。大数据的出现,就是为了解决海量数据的存储问题。随着海量数据的不断增加,传统数据库存储空间也越来越大,数据操作性能变差,甚至最后可能导致服務器崩溃,且传统数据库扩展费用昂贵。基于列式存储的HBase存储技术能够有效地处理海量数据,通过列式存储检索能忽略掉部分列数据从而实现更快的检索,研究海量数据的存储与快速检索能够帮助我们高效的处理今后日益复杂的数据,通过列式的分布式存储技术将类似的数据存储在一起压缩率更高,检索效率更好。

关键词:HBase;海量;列式存储;分布式;快速检索

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2019)04-0014-02

1 引言

当产生的亿级别的数据被存储到数据库中,对数据操作的性能肯定会下降。当对这一系列数据进行检索以及求和排序等操作的时候,访问的速度会由于内存占用过大而检索速度降低,甚至会发生数据库丢失数据,或者数据溢出等现象,有可能最后导致数据库服务器崩溃,采用分布式HBase列式存储技术能够有效解决这些问题。在处理数据时,可以将数据通过主节点分配到不同的节点上进行并行处理。

2 国内外研究现状

伴随科技的不断进步,各个行业都产生了大量的数据,这些数据越来越多维化且复杂化,这些海量数据都是有用的,如何存储这些海量的数据[4],以及如何实现海量数据的快速检索以及读写操作,有着重要的意义。由此产生了对大数据的研究,大数据下产生各种适合存储海量数据的数据库,以及计算框架和模型,有利于快速存储并检索分析海量的数据。

在国内为应对海量数据的存储及快速检索,一些国内的单位开始搭建自己的数据仓库,比如中国银行广州分行就已经建构了属于自己的数据仓库,包括从数据的采集,处理以及海量数据的存储已经检索方面,但是数据量相对来说比较小。比如网上购物平台淘宝,每一个客户相关的数据量级别至少是百万以上,每天的数据量都是千亿级别,万亿级别的数据,而这些数据都是不能够轻易地丢弃的,必须被实时存储起来,并且能够处理PB甚至比PB更高的实时数据。面对这些数据,要构建一个成本较低、高性能、高负载、分布式处理的海量数据库,并且这些数据信息也包括图片,视频,本文,音频等信息。淘宝公司采用了大数据技术,用Hive数据仓库和HBase数据库对海量数据进行存储,查询以及分析。HBase采用了分布式存储检索技术,能够多结点分布式处理这些数据。

Facebook每月的浏览量达到数亿级别的浏览量,Facebook的照片量以及视频音频信息非常巨大,每个月超过数亿级别的照片上传到网站上面,同样面对这些海量的数据信息。Facebook采用HBase来做数据的实时查询以及检索。

3 HBase存储与快速检索

3.1 HBase预分区存储

把需要存储的海量数据通过sqoop工具或者直接存储到HBase表中,HBase数据库在创建表的时候会自动分配出Region区域。在读入数据的时候,数据会不停地存储到这个Region区域中,直到这个分区足够大的时候才会自动切分这些Region分区,并且每个Region区域都存在着一个startKey和endKey,这两个值确定了数据的存储范围,即当Row Key的值落在某个区域就会被放入到某个Region区域。当没有对数据进行分区的时候,当数据达到一定值的时候会自动进行分区,由于在HBase本身的结构特征,表中Row Key是通过升序方式进行排序的,所以后面存入的数据都是被划分到后面的一个区域中,前面的Region区域空间中并没有存储到后面导入的数据,导致没有完全填充满数据。由于存储的数据量非常大,会在该过程中会发生多次切分Region区域的情况,每次切分有一部分数据都将不会被利用到,大大增加了存储效率以及存储空间,甚至可能导致HBase服务宕机。在应对海量的数据时,需要根据这些数据对表进行分区处理,然后通过对Row Key进行hash散列化,使这些海量数据能够均匀地分布在Region分区内,从而大大提高Region区域的利用率。Region结构图如下:

算法思路:首先通过算法产生随机的Row Key,这些行键会通过升序方式放入到一个集合中,然后进行对对表进行预分区处理,最后将这些Row Key均匀放入到分区块中。通过 rowKeyGenerator类产生Row Key:

设置Region分区的数据,需对Row Key进行迭代遍历,设置合适的Region分割值,最后将Row Key排序放入到相应的块中,完成预分区处理。

在预分区的过程中已经设置好每次数据切割的split值,然后再将这些随机产生的Row Key对应到相应的Region区域。减少了默认的预分区过程中部分数据块中数据未填充满,以及多次自动切分过程中的存储效率问题,然后将这些海量的数据通过根据随时产生的Row Key存储到表结构当中。

3.2 HBase二级快速索引

将存储的数据通过分区优化策略,以及建表中列族优化的策略将数据存储到表中。为了实现海量数据的快速检索,利用HBase表中的二级索引方式建立索引。传统的一级索引方式只是将索引建立在Row Key中,只能基于Row Rey对数据进行扫描,只能解决一些简单的SQL语句。但是如果我们需要对HBase进行一些不同列族之间的数据进行联合查询的时候,我们必须要采取二级索引的方式,二级索引的方式必须要建立在Region级别之上,主要是为了防止将索引表和数据表建立在不同的Region区域下。

二级索引建立和查询的思路过程:首先通过客户端向各个Region区域发送消息,分别在各个Region区域建立索引,并存储数据。检索的过程是客户端会向各个区域发送信息,各个Region区域会对相应的数据进行检索,查询,并将最后的结果返回给客户端,客户端获取到数据,最后提交数据。

(1)Region区域先建立起索引,索引信息如下:

(2)在Region收到客户端发来的信息,建立Scanner对象对Region区域中的Row Key进行搜寻:

(3)在搜寻的过程中会根据相应的Row Key值进行定位,得到索引的值。然后根据seekNext()方法得到下一个Row Key,然后得到索引过程中的值,后将相应的值得到保存并将结果提高给客户端实现数据的快速检索。

通过二次索引能够快速定位到需要检索的数据,有利于数据的快速检索,并且能提高检索效率,相比于一级索引具有更高的优势,更适合海量数据的检索。

4 总结

传统的数据库已经不再适合存储海量的数据,但可以通过将传统数据库中的数据通过sqooq工具导入到HBase中,通过HBase列式存储能够解决传统数据库在存储海量数据时的难点,加快数据的检索效率。HBase列式存储,主要是通过键值对方式进行存储,能够支持实时的查询,并且在数据导入到HBase表中可以先对表进行预分区处理,使数据都能够均匀地分布在每一个分区内,再采取二级索引的方式对数据进行快速检索,而传统的行式存储方式通过将一行行数据地放在同一个区域,在数据检索时无法忽略无关的列,增加检索耗时。当然在为了加快数据检索效率方面,可以將elasticResearch工具和HBase进行联合使用,elasticResearch主要是支持json数据实现数据的检索,可以通过对HBase中的数据建立索引实现数据的快速定位。

参考文献:

[1] 李存琛. 海量数据分布式存储技术的研究与应用[D]. 北京邮电大学,2012.

[2] 唐亦鹏. 海量数据研究系统的设计与实现[D]. 哈尔滨工业大学,2014.

[3] 卓海艺. 基于HBase的海量数据实时查询系统设计与实现[D]. 北京邮电大学,2013.

[4] 齐方方. 海量数据存储和准实时查询系统设计与实现[D]. 西南石油大学,2015.

[5] Nick Dimiduk. HBase实战[M]. 谢磊. 北京:人民邮电出版社,2013:1-315.

[6] 李军. 大数据:从海量到精准[M] 北京:清华大学出版社,2014:1-302.

[7]赵刚. 大数据[M] 北京:电子工业出版社,2013 1-278.

[8] 付文静. 基于HBase的大数据存储查询技术研究[D]. 电子科技大学,2015.

[9] 马翠云. 基于HBase的大规模数据存储解决方案的设计和实现[D]. 山东大学,2015.

[10] 冯晓普. HBase存储的研究与应用[D]. 北京邮电大学,2014.

[11] Jeffrey Dean.Sanjy Ghemawat. MapReduce:Simplified data Process-ing On Large Clusters [J].Communications of the ACM,2005,51(1):107-113.

【通联编辑:梁书】

猜你喜欢
海量分布式
一种傅里叶域海量数据高速谱聚类方法
海量快递垃圾正在“围城”——“绿色快递”势在必行
基于预处理MUSIC算法的分布式阵列DOA估计
一个图形所蕴含的“海量”巧题
多通道海量数据记录系统设计
一种海量卫星导航轨迹点地图匹配方法
西门子 分布式I/O Simatic ET 200AL
家庭分布式储能的发展前景
基于文件系统的分布式海量空间数据高效存储与组织研究