Hbase概述
HBase构建在 HDFS 之上,Hbase内部管理的文件全部存储在HDFS 中
Hbase 表的特点
- 大
- 无模式
- 面向列
- 稀疏 对于空( null )的列,并不占用存储空间
- 数据多版本
- 数据类型单一 Hbase中的数据都是字符串,没有类型。
hbase数据模型
Row Key
行键,Table的主键,Table中的记录按照Row Key排序。类型为Byte array
Column Family
列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以由任意多个Column组成
Column
列 格式为:familyName:columnName
Version Number
版本号。默认值是系统时间戳。每个 rowkey 唯一。类型为long
Value (Cell)
具体的值,类型为Byte array
Hbase物理模型
每个 column family 存储在 HDFS 上的一个单独文件中
Key 和 Version number 在每个 column family 中均有一份
HBase 为每个值维护了多级索引,即: key, column family, column name, timestamp
Table 中的所有行都按照 row key 的字典序排列;
Table 在行的方向上分割为多个Region;
Region 按大小分割的,每个表开始只有一个 region ,随着数据增多, region 不断增大,当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region
Region 是 HBase 中分布式存储和负载均衡的最小单元。不同Region分布到不同RegionServer上
Region 虽然是分布式存储的最小单元,但并不是存储的最小单元。
- Region 由一个或者多个 Store 组成,每个 store 保存一个columns family ;
- 每个 Strore 又由一个 memStore 和 0 至多个 StoreFile 组成;
- memStore 存储在内存中, StoreFile 存储在 HDFS 上**
Hbase架构
Hbase 基本组件
Client
包含访问 HBase 的接口,并维护 cache 来加快对 HBase 的访问
Zookeeper
- 保证任何时候,集群中只有一个 master
- 存贮所有 Region 的寻址入口
- 实时监控 Region server 的上线和下线信息。并实时通知给 Master
- 存储 HBase 的 schema 和 table 元数据
Master
- 为 Region server 分配 region
- 负责 Region server 的负载均衡
- 发现失效的 Region server 并重新分配其上的 region
- 管理用户对 table 的增删改查操作
Region Server
- Region server 维护 region ,处理对这些 region 的 IO 请求
- Region server 负责切分在运行过程中变得过大的 region
Zookeeper 作用
Zookeeper避免了HMaster的单点问题 HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行
Write-Ahead-Log ( WAL )
Region 定位
第一次读取:
步骤1:读取ZooKeeper中ROOT表的位置。
步骤2:读取ROOT表中.META表的位置。
步骤3:读取.META表中用户表的位置。
步骤4:读取数据。
如果已经读取过一次,则root表和.META都会缓存到本地
则直接去用户表的位置读取数据
-ROOT- 表与 .META. 表
-ROOT- 表
-ROOT- 表包含 .META. 表所在的 region 列表,该表只会有一个 Region ;
Zookeeper 中记录了 -ROOT- 表的 location 。
.META. 表
.META. 表包含所有的用户空间 region 列表,以及
RegionServer 的服务器地址。
Hbase应用
何时使用Hbase
- 需对数据进行随机读操作或者随机写操作;
- 大数据上高并发操作,比如每秒对PB级数据进行上千次操作;
- 读写访问均是非常简单的操作。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。