数据流信息从MySQL到HBase的迁移策略的研究Word文档下载推荐.docx
- 文档编号:15386556
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:5
- 大小:21.11KB
数据流信息从MySQL到HBase的迁移策略的研究Word文档下载推荐.docx
《数据流信息从MySQL到HBase的迁移策略的研究Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据流信息从MySQL到HBase的迁移策略的研究Word文档下载推荐.docx(5页珍藏版)》请在冰豆网上搜索。
数据流;
迁移;
索引
中图分类号:
TP392
文献标识码:
A
DOI:
10.3969/j.issn.1003-6970.2015.11.001
0引言
数据流产生于动态的网络环境中,相比较传统的数据集,这些数据具有快速性、连续性、变化性、无限性等特点,这使数据流信息的存储管理面临着新的要求和挑战。
众所周知关系数据库非常善于处理事务的更新操作,尤其是处理更新过程中复杂一致性的问题,并可以进行Join等复杂条件查询,为此,关系数据库在企业市场一度占据长期稳固的统治地位。
但是,关系数据库在一些操作上过大的开销严重影响了数据存储管理的效率,尤其是关系数据库不擅长处理一些海量数据存储管理方面的操作:
首先,关系数据库扩展能力有限,无法大规模扩展,即使网络解决方案在一定程度上改善了这个问题,但还是无法有效的动态添加新节点,创建新的集群,随着大数据时代的到来,关系数据库也就逐渐不能满足海量数据的存储管理需求。
其次,关系数据库不善于处理非结构化数据。
互联网的快速发展,尤其是移动互联网的发展,移动终端的多样化使用,今天的数据已不再是传统的结构化数据,而是通过设备、服务器、应用自动产生的非结构化或半结构化数据,这为数据的存储管理提出了新的挑战。
最后,关系数据库比较难以处理存储字段不固定的情况,不能有效的为数据库表添加新字段。
一些社交网络和大数据公司,例如Facebook、谷歌等,首先意识到在现如今的海量数据和多样化数据类型的环境下,关系数据库不再是最佳的选择。
因此,NoSQL数据库,例如MongoDB、Cassandra、HBase等,就应运而生了。
这类数据库的主要功能之一就是帮助用户动态的、简便地扩展数据存储服务器的数量。
如何把关系数据库中的数据迁移到NoSQL数据库中并且设计合理的表格式来符合海量数据的存储管理需求已成为开发者所关注的问题。
HBase是目前最受欢迎的开源NoSQL数据库之一,分布式,可伸缩,基于列的数据存储特点使其在大数据领域的应用越来越广泛。
开发人员可以在不了解HBase的底层存储模式的情况下通过一些数据仓库工具,如Hive,来操作HBase中的数据。
另外,HBase还提供了大量的编程接口,可供HadoopMapReduceJob并行批处理HBase表数据。
但是,HBase和其他NoSQL数据库一样,都有其适用范围,在复杂条件查询的情况下,HBase的查询效率并不高。
本文将以数据流信息从MySQL到HBase的迁移为例,研究和探讨HBase数据库表和索引的转换设计,在满足复杂条件查询需求的基础上,提高数据流信息的存储管理效率。
1研究背景
1.1HBase介绍
HBase是完全不同于关系数据库的新型NoSQL数据库,类似于Google的BigTable,是一个稀疏长期存储的、面向列的、排序的映射。
从逻辑视图来看,HBase是一个具有映射关系的很大的表,可以有数百万列和数十亿行,由于HBase是稀疏存储数据的,所以某些列可以是空的,表1是一个HBase表逻辑视图的示例。
1)RowKey:
RowKey是表的行键也是表的唯一索引,在HBase中通过RowKey访问行有三种方式:
通过单个RowKey访问;
通过给定RowKey范围访问;
全表扫描。
RowKey可以是任意字符串(最大长度64KB)并按字典序进行存储,所以在用HBase存储数据时.要对RowKey进行精心设计,使经常一起读写的行能够一起存储。
2)列族:
列族是一些列的集合,一个列族所有列成员是有着相同的前缀,比如,列Info:
sip和Info:
dip都是列族Info的成员,冒号(:
)是列族的分隔符,用来区分前缀和列名。
column前缀必须是可打印的字符,剩下的部分(称为qualify),可以由任意字节数组组成。
族必须在表建立的时候声明,而列可以随时新建。
在物理上,一个列族成员在文件系统上都是存储在一起的,并以相同的方式访问。
3)时间戳:
在HBase中数据可能有多个版本,每个版本之间用时间戳来区分。
4)Cell:
由{rowkey,column(=+),version}唯一确定的单元,Cell中的数据是没有类型的,全部以字节码形式存储。
尽管在逻辑视图里,HBase表可以被看成是一个稀疏的行的集合,但在物理上,HBase表在行方向上分割成多个Region,并按列族存储。
Region按照大小分割,每个表刚开始只有一个Region,随着数据不断的插入表中,Region不断增大,当增大到一个阀值的时候Region就会分割为两个Region,当表中的行不断增多,就会有越来越多的Region。
实际上,每个Region由一个或多个Store组成,每个Store保存一个ColumnFamily,每个Store又由一个memStore和0到多个StoreFile组成,而StoreFile又将以HFile的形式保存在HDFS上。
由HBase的逻辑和物理上的存储模型可以看出,HBase可以用来存储网络数据流信息,并最终将数据以HFile的形式存储在Hadoop的HDFS上,在保证良好的扩展性和安全性的基础上,能够实现数据的分布式存储,为数据流信息的分析,处理和服务提供可靠的保障。
1.2HBase存在问题和研究现状
HBase非常适合存储海量的结构化或半结构化的互联网增量数据,并能够满足快速随机的访问需求,但是在逻辑上,RowKey是HBase表数据的唯一索引,而HBase没有二级索引机制,所以HBase只能依靠RowKey来进行索引,不能有效的支持复杂条件查询。
为了解决HBase复杂条件查询的局限性问题,各大公司和开源社区都提出了有效的解决方案,并很好的实现了二级索引,这些解决方案都有自己的优势,同时也都有各自的局限性。
在查询字段不多的情况下,开发者普遍的做法是将要查询的字段冗余到RowKey里面,但是单一RowKey索引的局限性决定了这种方案不可能有效的支持多条件查询。
通常情况下,查询包含在RowKey里的字段能够达到令人比较满意的效果,但字段在RowKey里的先后顺序也同时决定了查询效果的满意程度,当查询其他字段的时候,这种方案就表现得很不理想,甚至在某种极端情况下查询性能会退化为全盘扫描的水平,实现起来比较复杂,不灵活。
IHBase和ITHBase是两种比较相似的开源的解决方案,都是从HBase源码级别进行了扩展,重新定义和实现了一些服务端和客户端的处理逻辑,由于这两种方案都改变了HBase原有的处理逻辑,具有较强的侵入性,在使用上会出现一些兼容性问题。
CCIndex是中国科学院提出的一种二级索引方案,为提高数据的查询效率,CCIndex把数据的详细信息也存储在索引表中,这样在查询过程中就可以直接从索引表中通过顺序扫描找到相应的数据,把随机查询变成顺序查询,大大的缩短了查询时间。
但是把数据的详细信息都存储在索引表中同时也造成了数据的高冗余问题,虽然后来又提出了将HDFS数据块的备份数设为1来缓解数据的冗余问题,但同时也带来了数据的低容错性等问题。
2方案设计
HBase存储数据的主要目的并不是单纯的数据存储,而是利用Key/Value存储模式实现数据的实时查询功能,通过MapReduce对数据进行离线处理或批处理,那么,高效的HBase表和索引的设计必然要考虑数据的索引范围、数据的冗余和数据的一致性问题。
根据HBase的数据存储模式和单一RowKey检索的特性,在确保不改变HBase固有源码的前提下,以数据流信息的存储为例,来研究和探讨在实际应用中如何设计HBase表和索引。
2.1表和索引的设计
在实际应用中,数据流信息主要是用来统计分析某一时段网络行为、网络中的应用排行、预测未来流量走势、排除网络故障等,在此过程中,首先要根据不同条件组合从HBase表中查询和读取数据,鉴于这种特定的应用场景,文章将采用基于列的方式对数据流信息表建立索引,即将列值与目标记录RowKey建立映射,简单来说就是针对目标记录的某一列或某些列建立的“键一值”数据,以列的值为键,以目标记录的RowKey为值,在以某些列为条件进行查询时,可以根据“键一值”迅速的找到目标记录。
考虑到数据流信息本身的特性,数据流信息表的设计将不考虑TimeStamp,数据流信息表如表2所示。
在数据流信息表和索引的设计方案中,索引将以普通数据的形式和原始数据存储在一张表中,并通过特殊的RowKey设计将原始数据和索引数据分隔开,原始数据存储在表的前半部分,索引数据则存储在表的后半部分,不会混杂在一起,且以后新增查询关键字,对于历史数据只需重新遍历建立索引,原始数据仍然只有一份。
另外,通过给索引和原始数据分配不同的ColumnFamily,在物理存储上把它们分隔开,避免索引和原始数据存储在一张表中所带来的冲突。
在HBase表中RowKey按字典序排列,合理的RowKey设计可以提高数据检索的效率。
本文分别对索引和原始数据的RowKey通过不同的前缀进行了特定设计,首先是原始数据,RowKey的格式为:
D原始key,在原始key之前加上一个字母D作为前缀与索引分隔开,而索引的RowKey设计相对复杂一些,格式为:
I-索引类型-条件|索引值,前缀字母I表示该条记录为索引数据;
索引类型是给索引进行分类,如表2中所示,索引类型a表示列sip和dip的联合索引,索引类型b表示列sip和appname的联合索引;
索引值则是目标记录的RowKey。
2.2写入过程
由于方案是将原始数据和索引存储在同一个表中,所以在向表中写入数据之前,首先要将所有索引进行分类,并拼接成特定的索引RowKey同原始数据一起写入到HBase表中,写入过程如图2所示。
首先由客户端发起数据写入请求,得到服务器响应并获得写入目标区域后,将原始数据和所有该数据的索引封装成Put对象,然后向HLog文和MemStore中写入数据。
将原始数据和索引封装成Put对象再写入而不是分开写的好处是:
原始数据和索引要么全部写入成功,要么全部写入失败,可以避免原始数据写入成功而索引写入失败或原始数据写入失败而索引写入成功的情况,从而也避免了数据不一致性问题。
但如果要加入新的查询关键字时,就要不可避免的重新遍历表来建立新的索引。
在向HBase表中写入原始数据和索引的同时,对所有索引进行整理分类建立索引规则集,用来之后查询数据时快速返回索引类型和索引值。
2.3查询过程
当服务器收到来自客户端的查询请求时,首先要通过规则集判断查询的索引类型,如果规则集中存在查询条件所对应的索引类型,则根据索引类型进行查询,否则,服务器将在表的数据区进行数据查询,不再读取索引区。
假定需要查询满足条件sip=siplanddip=dipl的数据流信息记录,分析查询条件并匹配索引类型规则集可知应使用索引类型a,也就是说首先确定了索引类型,于是在HBase表上进行扫描的区间将从数据全集缩小至[I-a,I-b),然后拼接查询字段的值,我
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据流 信息 MySQL HBase 迁移 策略 研究