HBase学习报告
0 引言
随着互联网的发展,用户的使用量和使用范围变得越来越广,因此会产生大量的数据,对于这些数据的储存、处理,传统的数据库表现出越来越多的问题,从目前发展情况看,关系数据库已经不适应这种巨大的存储量和计算要求,查询效率随着数据量的增长变得越来越低。面对这些问题,一些新型的数据库应运而生,对海量数据的存储和处理提出了解决方案,HBase就是其中之一。
1 HBase简介
Hbase是Apache Hadoop的数据库,能够对大数据提供随机、实时的读写访问,具有开源、分布式、可扩展及面向列存储的特点。HBase的目标是处理大型的数据,具体来说就是使用普通的硬件配置即可处理成千上万行的列和行组成的大数据。
HBase是一个分布式的,多版本的,面向列的存储模型。它可以使用本地文件系统。也可以使用HDFS文件存储系统,但是,为了提高系统的健壮性和可靠性,并充分发挥HBase的大
数据处理能力,使用HDFS作为文件存储系统更合适,使用MapReduce来处理海量数据,利用Zookeeper作为协同服务。
另外,HBase的存储结构是松散性数据,它使用简单的key和value的映射关系,但又不是简单的映射关系,这种关系为超大规模的高并发的海量数据实时响应系统提供了一个很好的解决方案。HBase的存储的数据从逻辑上来看就像是一张很大的表,并且,它的数据可以根据需求动态地增加。HBase还具有这样的特点:它向下提供了存储,向上提供了运算。这样的特点使它将数据存储和并行计算完美地结合在了一起。
2 HBase体系结构
HBase的服务器体系结构遵从简单的主从服务器架构,它由HRegion服务器和HBase Master服务器构成。HBase Master服务器负责管理所有的HRegion服务器,而HBase中的所有服务器都是通过ZooKeeper来进行协调并处理HBase服务器运行期间可能遇到的错误。HBase Master本身并不储存HBase中的任何数据。HBase Master服务器中存储的是从数据到HRegion服务器的映射。
2.1 HRegion服务器
所有的数据库数据一般都是保存在HaDoop的分布式文件系统上,用户通过一系列的HRegion服务器获取这些数据。HRegion服务器包含两大部分:HLOG部分和HRegion部分。其中HLOG用来粗存数据日志,采取的是预写日志的方式。HRegion部分由很多的HRegion组成,用来存储实际数据。每一个HRegion又由很多Store组成,每一个Store存储一个列族下的数据。此外,每一个HStore包含一块MemStore。MemStore驻留在内存中,数据到来时首先更新到MemStore中,当达到阈值时,再跟新到对应的StoreFile中,每一个Store包含多个StoreFile,StoreFile负责实际的数据存储,是HBase中最小的存储单元。
HBase不涉及数据的直接删除和更新操作,所有的数据均通过追加的方式进行更新。数据的删除和跟新在HBase合并是进行,当Store中的StoreFile数量超过阈值时将触发合并操作,把多个StoreFile合并成一个StoreFile。
当用户需要更新数据时,数据会被分配到响应的HRegion服务器上提交修改。数据首先被提交到HLOG文件里面,在操作写入HLog后,才会将其返回给客户端。HLog文件用于故障恢复。
2.2 HBase Master服务器
每天HRegion服务器会和HMaster通信,HMaster的任务就是告诉每个HRegion服务器它维护哪些HRegion。HMaster功能上主要负责Table和HRegion的管理工作,具体包括:管理用户对Table的增删改操作,管理HRegion服务器的负载均衡,负责新HRegion的分配,在HRegion服务器停机后,负责失效的HRegion服务器上的HRegion迁移。
2.3 ZooKeeper
ZooKeeper负责监控各个机器的状态,每台机器回到ZooKeeper中注册一个实例,当某台机器发生故障时,ZooKeeper会在第一时间感知到,并通知HBase Master进行相应的处理。同时HBase Master发生故障时,Zookeeper还负责HBase Master的恢复工作,能够保证在同一时系统中只有一台HBase Master提供服务。
3 HBase数据模型
3.1 数据模型
HBase是一个类似Bigtable的分布式数据库,它是一个稀疏的长期储存的、多维度的、排序的映射表。这张表的索引是行关键字、列关键字和时间戳。HBase中的数据都是字符串,没
有类型。用户在表格中存储数据,每一行都有一个可排序的主键和任意多的列。由于稀疏存储,每一张表里的每一行都可以是截然不同的。
列名字的格式是”<family>:<qualifier>”,都是由字符串组成的。每张表有一个列族集合,这个集合是固定不变的,只能通过改变表结构来改变。但是qualifier值相对每一行表来说都是可以改变的。
HBase把同一个列族里面的数据储存在同一个目录下,并且HBase的写操作是锁定的,每一行都是一个原子元素,都可以加锁。
HBase所有数据库的更新都有一个时间戳标记。每个更新都是一个新的版本,HBase会保留一定数量的版本,这个值是可以设定的。客户端可以选择距离某个时间点最近的版本单元的值,或者一次获取所有版本单元的值。
3.2概念视图
一张表可以被想象成一个巨大的映射关系,通过行健、列键+时间戳+列,就可以定位特定的数据。HBase是稀疏存储数据的,因此某些列可以是空白的。
hbase属于什么数据库
3.3 物理视图
虽然从概念上来看每个表都是由很多行组成的额,但在物理储存上面,它是按照列来保存的。在概念视图上,有些列虽然是空白的,但是这样的列在实际上并不会被保存,当请求这些空白的单元格是,会返回NULL。如果在查询上不提供时间戳,那么会返回距离现在最近的一个版本的数据,因为在存储的时候,是按照时间戳的顺序来排序的。
4 HBase关键技术
4.1 NoSQL
传统的关系型数据库中的表都是存储一些格式化的数据结构,数据库会为每个元组分配所有的字段,这样的结构便于表与表之间进行连接等操作。但对复杂的SQL查询,特别是多表关联查询则往往导致性能瓶颈,在对应超大规模和高并发的数据时显得力不从心,暴露出了很多难以克服的问题,而非关系型数据库由于本身的特点得到了飞速的发展。
NoSQL指的是非关系型的数据库,HBase就是这种数据库的代表。NoSQL数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库无法比拟的性能
优势。非关系型数据库通常以键值对(key—value)存储,它的结构不固定,每一个元组可以有不一样的字段,可以存储任何结构的数据,每个元组可以根据需要增加一些自己的键值对。这样就不会局限于固定的结构。可以减少一些时间和空间的开销。NoSQL可以分布在廉价PC服务器集上。在处理海量数据时,可以省去SQL执行的时间。使得系统执行速度变得更快。
4.1.1 CAP理论
Eric Brewer在发表于ACM的PODC中名为“关于Robust分散式系统”的文章中首次提及CAP理论。CAP理论可以解释为性(consistency)、性能(availability)以及分区容忍性(partition tolerance)[1]。具体描述如下:
一致性:一个数据库如何处理读写一致的问题。分布式系统对一致性的问题要求为当更新写入操作完成时,其余的读取操作需要及时看到数据更新。有些系统对一致性有着更为严格的要求。
可用性:一个系统能够持续不间断使用的问题。严格定义的高性能可用性意味着一个系统从设计到实施都能进行可持续的操作,无论操作冲突还是因为软硬件升级而导致的失效。
分区容忍性:系统在提供持续性操作时分区处理的能力。一旦开始将数据和逻辑分布在不同的节点上时,就有形成分区的风险。分区也可以理解为系统灵活地处理节点增加和删除的能力。
但是,在数据共享系统中,这三种特性是无法同时实现的,最多只能选择其中的两种执行,这个理论已经得到了大量的验证,实际中的系统必须对这三种特性进行取舍。HBase是选取了一致性和分区容忍性这两种特性。
4.1.2 BASE思想
传统的ACID模式对数据的属性要求非常高,在分布式系统中比较难以达到。所以在CAP理论的基础上,提出了BASE思想,对一致性进行概化处理。
要解释BASE思想,首先要对ACID有一个了解,ACID指的是传统数据库对于数据特性的要求,具体内容如下:
原子性(A):事物执行作为原子,不可再分离,整个语句要么执行,要么不执行,不能停留在中间某个环节。
一致性(C):在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。
隔离性(I):两个事务的执行互不干扰,一个事务不可能看到其他事务运行时中间某一时刻的数据。两个事务不会发生交互。
持久性(D):在事务完成以后,该事务对数据库所做的更改便持久地保存在数据库之中。并不会被回滚。
在数据库系统中,事务的ACID属性保证了数据库的一致性。然而,这些ACID特性对于大型的分布式系统来说,与高性能是不兼容的。比如,在网店买东西。任何一个人买东西的过程都会锁住数据库直到买东西彻底完成。买完时,每一个人都可以看到库存减少了。也就是说。不允许存在两个人同时买的情况。很明显对于大多数网上商城,尤其是大型网商来说,这个方法并不适用。
BASE思想实际上是CAP理论中AP的衍伸。它通过牺牲高一致性,保证高可用性和分区容忍性。它同时也是ACID的一个变种。BASE在英文中有基本的意思,也可以说实际上强调的就是能保证连续“基本”可用的一种模型。BASE思想的组成有以下3个部分:基本可用、软状态、最终一致性。
BASE模式指的是一个应用在任意时间首先应该能完成最基本化的工作(即基本可用),并不需要总是一致(即软状态),但最终应该是一致(即最终一致性)的。ACID和BASE应该被看作同一范畴内的互相补充品,而不是替代品。
BASE与ACID的比较:
ACID                    BASE
高度一致                弱一致。仅需要针对性数据
高度分割化                可用性第一位
着重于“提交”            一般注重
网状事务                较为激进
弱可用性                注重可用性
较保守                    更简单 更快
扩展性不强                更具有扩展性
4.1.3 最终一致性
有两种方式看待一致性。一种是从开发者,客户端的角度,如何观察数据更新;另一种是从服务器端,更新如何在系统中流动以及对于更新系统能提供什么样的保证。客户端观察到的一致性指的是,何时以及如何能观察到对存储系统中的数据对象所做的更新。对于一致性的解释,根据强度的不同,分为强一致性和弱一致性两种。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。