前文回顾:MapReduce基本原理
目录
HBase基本介绍
HBase的设计目标和功能特点
HBase在Hadoop中的生态环境
HBase的数据模型
逻辑数据模型
物理存储格式
HBase基本构架
HBase数据存储管理方法
HBase子表数据存储与子表服务器
HBase数据的访问
HBase数据记录的查询定位
HBase 是一种分布式、可扩展、支持海量数据存储的 NoSQL(not only SQL) 数据库。
Hadoop主要是实现批量数据的处理,并且通过顺序方式访问数据。要查找数据必须搜索整个数据集,如果要进行随机读取数据,压根就不支持。即Hadoop仅适合存储大批量的数据,进行顺序化读取数据,并不支持随机读取数据操作。
可与MapReduce协同工作,为MapReduce提供数据输入输出,以完成数据的并行化处理。
HBase是一个分布式多维表,表中的数据通过:一个行关键字(row key),一个列关键字(column family + column name),一个时间戳(time stamp)进行索引和查询定位。
优秀网图
- 对于HBase来说,它根本不认为存在行列这样的概念,在实现时只认为存在键值对这样的概念。键值对的存储是排序的,行概念是通过相邻的键值对比较而构建出来的。
- 也就是说,HBase在物理实现上并不存在传统数据库中的二维表概念。因此二维表中字段值的空洞,对于HBase来说在物理实现上并不存在,而不是所谓的值为null。
按列存储的稀疏行/列矩阵。物理存储格式上按逻辑模型中的行进行分割,并按照列族存储。
值为空的列不予存储,节省存储空间。
优秀网图
由一个MasterServer和一组子表数据区服务器RegionServer构成,分别存储逻辑大表中的部分数据
- 当一个新的子表服务器注册时,主服务器让新的子表服务器装载子表。
- 若主服务器与子表服务器连接超时,那么子表服务器将自动停止,并重新启动;而主服务器则假定该子表服务器已死机,将其上的数据转移至其它子表服务器,将其上的子表标注为空闲,并在重新启动后另行分配使用。
大表被分为很多个子表(Region),每个子表存储在一个子表服务器RegionServer上
每个子表中的数据区Region由很多个数据存储块Store构成,而每个Store数据块又由存放在内存中的memStore和存放在文件中的StoreFile构成。
- 每个表一开始只有一个Region,随着数据不断插入表,Region不断增大。当一个Region增大到一个阈值(由参数hbase.hregion.max.filesize指定,但这个阈值其实不是限制每个Region大小的,而是限制每个Store大小的)的时候,原来的Region会被分裂成两个新的Region(从而保证Region不会过大)。
- 随着表中的行数不断增多,Region的数目也会逐渐增多。
- 多个region共享一个日志(串行)
当客户端需要进行数据更新时,先查到子表服务器,然后向子表提交数据更新请求。提交的数据并不直接存储到磁盘上的数据文件中,而是添加到一个基于内存的子表数据对象memStore中,当memStore中的数据达到一定大小时,系统将自动将数据写入到文件数据块StoreFile中。(就和抽血检测似的,抽满一板统一提交去检测)
每个文件数据块StoreFile最后都写入到底层基于HDFS的文件中(Hfile)
需要查询数据时,子表先查memStore。如果没有,则再查磁盘上的StoreFile。每个StoreFile都有类似B树的结构,允许进行快速的数据查询。StoreFile将定时压缩,多个压缩为一个。
两个小的子表可以进行合并。
根子表->用户表的元数据表->用户表
- 按表的名字排序
- 大表里的行是按role-key作为代表
- 每个region里的第一行的role-key作为代表
参考教材:《深入理解大数据:大数据处理与编程实现》
参考博客:HBase简介