什么是hbase?
HBase是一个高可靠,高性能,面对列可伸缩的分布式文件系统,可以存储海量的结构化,半结构化,非结构化数据(底层是按照字节数组存储的)
(HBase利用HDFS作为文件存储系统,利用zookeeper作为元数据的元数据存储)
HBase 与 HDFS 比较
HBase内部使用哈希表提供随机接入通过HashMap键快速查找到表值
HBase的特点
* 他是分布式数据库
* 列式存储
* 稀疏性
Hbase需要通过行键,列簇,列名,版本号来确定一个列值
数据模型
HBase通过表格的模式存储数据,每个表格由列和行,每个列被划分为若干个列簇
# 三维有序:
1) 一个hbase表中,行键之间按照字典顺序排序
2)一行中每一个列名之间按照字典顺序排序
3)同一个列多个版本号数据,版本之间按照字典顺序排序
HBase数据模型
HBase将数据存放在带有标签的**表**中,表由**行和列**组成,
行和列交叉确定一个**单元格**,单元格有**版本号**,版本号自动分配,
为数据插入该单元格时的**时间戳**。单元格的内容没有数据类型,**所有数据都被视为未解释的字节数组**。
表格中每一行有一个**行键**(也是字节数组,任何形式的数据都可以表示成字符串,比如数据结构进行序列化之后),
**整个表根据行键的字节序来排序**,所有对表的访问必须通过行键。
表中的列又划分为多个**列族**(column family),同一个列族的所有成员具有相同的前缀,具体的列由列修饰符标识,
因此,**列族和列修饰符**合起来才可以表示某一列,比如:info:format、cotents:image
在创建一个表的时候,列族必须作为模式定义的一部分预先给出,而**列族是支持动态扩展的**,
也就是列族成员可以随后按需加入。物理上,所有的列族成员一起存放在文件系统上,
所以实际上说HBase是面向列的数据库,更准确的应该是**面向列族**,
调优和存储都是在列族这个层次上进行的。一般情况下,同一个列族的成员最后具有相同的访问模式和大小特征。
总结起来,HBase表和我们熟知的关系型数据库的表很像,不同之处在于:**行按行键排序,列划分为列族,单元格有版本号,没有数据类型。**
Hbase数据坐标
我们由【行键,列簇,列名,版本号(时间戳。自动分配)】确定一个单元格,单元格的数据没有类型,全部都是由字节码形式存储,我们可以将她看做成一个思维坐标
HBase系统架构
HBase的组件
HBase由三种类型的服务器以主从模式构成:
Region Server:负责数据的读写服务,用户通过与Region server交互实现对数据的访问
HBase HMaster:负责Region的分配及数据库的创建和删除等操作
ZooKeeper:负责维护集群的状态
Memstore 与 storefile
- 一个region由多个store组成,一个store对应一个CF(列簇)