Hbase简介
- Hbase是一个分布式的存储系统
- Hbase利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理Hbase中的海量数据,利用Zookepper作为协调工具
- Hbase构建在HDFS之上,内部管理的文件全部存储在HDFS中
- 实际就是一张极大的、非常稀疏的,存储在分布式文件系统上的表
Hbase纯在的意义
- hdfs只能是存储文件的,最多是你只能不停的往文件的末尾不停的追加数据.,不支持数据随机查找,不支持增量数据处理,不支持数据更新
- 传统关系型数据库系统已无法适应大型分布式数据存储的需要
- 关系模型对数据的操作让数据的存储变得复杂
Hbase表的特点
- 大:一个表可以有数十亿行,上百万列;
- 无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;
- 面向列:面向列(族)的存储和权限控制,列(族)独立检索;
- 稀疏:对于空(null)的列,并不占用存储空间,表可以设计的非常稀疏;
数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳(后边会提到);- 数据类型单一:HBase中的数据都是字符串,没有类型
Hbase数据模型
- 数据存放在带标签的表中(表由rows(行)和columns组成)
- 单元格(table cells)有版本
- 列组成列族
- RowKey(行键)和ColumnKey(列键)是二进制值byte[ ],按字典顺序排序
- Timestamp(时间戳)是一个64位整数
- value是一个未解释的字节数组byte[ ]
- 表中的不同行可以拥有不同数量的成员。即支持“动态模式”模型
ps:ColumnFamily(列族)
Hbase行的特点
- 字符串、整数、二进制串甚至串行化的结构都可以作为行键
- 表按照行键的“逐字节排序”顺序对行进行有序化处理
- 表内数据非常‘稀疏’,不同的行的列的数完全目可以大不相同
- 可以只对一行上“锁”
- 对行的写操作是始终是“原子”的
Hbase列的特点
- 列必须用‘族’(family)来定义
- 任意一列有如下形式 “族:标签”
- 其中,族和标签都可为任意形式的串
- 物理上将同“族”数据存储在一起
- 数据可通过时间戳区分版本
数据模型总结
- 表是存放数据的。表由行和列组成
数据模型 - Row Key: 行键,Table的主键,Table中的记录按照Row Key排序
- Timestamp: 时间戳,每次数据操作对应的时间戳,可以看作是数据的version number
- Column Family:列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以有任意多个Column组成,即Column Family支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。
Hbase架构体系
- Client(客户端)包含访问HBase的接口,client维护着一些cache 来加快对HBase的访问,比如region的位置信息
- Zookeeper
- 保证任何时候,集群中只有一个running master
- 存贮所有Region的寻址入口
- 实时监控Region Server 的状态,将Region server 的上线和下线信息,实时通知Master
- 存储HBase的schema,包括有哪些table,每个table有哪些column family
- Master可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行
- 为Region server 分配region
- 负责region server 的负载均衡
- 发现失效的region server 并重新分配其上的region
- Region Server
- 维护Master 分配给它的region,处理对这些region 的IO 请求(向hdfs中读写数据,是hbase中最核心的模块)
- 负责切分在运行过程中变得过大的region
Hbase总览
- HBase中有两张特殊的Table,-ROOT-和.META.
- .META.:记录了用户表的Region信息,.META.可以有多个regoin
- -ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region
- Zookeeper中记录了-ROOT-表的location
- Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问