简介
hadoop的局限
hadoop主要实现批量数据的处理,并且通过顺序方式访问数据
要查找数据必须搜索整个数据库,如果要进行随机读取数据,效率较低
HBase与NoSQL
- NoSQL是一个通用术语,泛指一个数据库并不是使用SQL作为主要语言的非关系型数据库。
- 谷歌的三篇论文,GFS、Mapreduce、BigTable 解决海量数据的传输、计算和存储问题。
- Hbase是BigTable的开源版本,是建立在HDFS之上,提供高可靠性,高性能,列存储,可伸缩,实时读写NoSQL的数据库系统。
- 适合数据量特别大的,几十亿数据秒读取。少量数据优势不明显。也就是支持HDFS的随机写操作(下载下来,重新写再重新上传)。
- Hbase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库系统。
- Hbase也是apache的顶级项目。
HBase的数据模型
逻辑上,Hbase的数据模型同关系型数据库类似,数据存储在一张表中,有行有列,但从HBase的底层物理存储结构(K-V)来看,更像是一个多维的地图。
Hbase架构很难。
HBase的逻辑架构
Rowkey :行键,必须存在,系统自带。插入数据时必须带有rowkey,相当于mysql的主键。按照字典序(按位比较)存储。
竖着按照列族切分。office_info、peronal_info均为列族。 和mysql的第一个区别,将很多的列分为不同的列族放在不同的文件夹存储。每个列族(有几百个列)放在一个文件夹存储。
横着按照rowkey的数据量切分,横向的切片叫做region。
store:真正在hdfs里分布存储的数据块。
HBase物理存储结构
TimeStamp:版本及时间戳(实现随机写操作完全依赖时间戳)HBase项目中windows和linux的时间必须调一致。
取时间戳最大的作为最新的数据。可以做到时间同步。
Type:删除操作类型为Delete,插入数据操作类型为Put。
数据模型
-
Name Space
命名空间,相当于database,每个命名空间下有多个表,HBase有两个自带的命名空间,Hbase和的default。Hbase存放Hbase内置的表,default是用户默认使用的命名空间。 -
Region
类似于关系型数据库的表概念。不同的是HBase定义表只需要声明列族即可,不需要声明具体的列(name:张三,而不需要定义name)。这意味着,往Hbase写入数据时,字段可以动态、按需指定。因此,Hbase能够轻松应对字段变更的场景。 -
Row
Hbase表中的每行数据有一个RowKey和多个Column(列)组成,数据按照rowkey的字典数据存储,并且查询数据时只能根据rowkey进行检索,所以rowey的设计十分重要 -
Column
Hbase中每个列都有Column Family(列族)和Column Qualifier(列限定符)指定。 -
Time Stamp
用于表示数据的不同版本,每条数据写入的时候,如果不指定时间戳,系统就会自动为其加上该字段,值为写入Hbase的时间。 -
Cell
由rowkey,column Family:Collumn Qualifier,tim Stamp)唯一确定的单元。cell中的数据时没有类型的,全部都是字节码形式存储。即不区分int float等数据类型,hbase自带字节工具类。
Hbase基本结构(不完整版)
Hbase的数据存在hdfs文件系统,存在Linux磁盘中。
Region放在Region Server中。
- RegionServer的作用:Data:get,put(增改),delete 。Region:SplitRegion、compactRegion
Master(元数据的入口,管理表结构,DDL)DML管理数据
zookeeper帮助管理,实现高可用。
Master宕机的时候一段时间内,不影响数据的增删改查。
- Master作用:Table:create/delete/alter 。RegionServer:分配regions到每个RegionServer,监控每个RegionServer的状态