数据模型
- Table:表,包含多行数据。eg: user 用户表
- Row:行,由一个row key和多个列组成。
- Column:列,由列族或列限定符组成
- Column Family:列族,一个列族包含多个列限定符及列限定符对应的值。eg : home、company。用户有home和company两类信息,其中home、company就是列族。该值是在创建表时确定后期不能变。
- Column Qualifier:列限定符,属于某一个列族,列限定符中可以存放多个单元。eg:key:value,列限定符就是key,value就是列限定符代表的一个单元。home:address=jiangsu。其中address属于home列族下一个列标识,jiangsu是对应的单元(jiangsu这个值有个时间版本号:时间戳)。列标识和单元,在表创建完成后动态添加、删除,添加只需添加值,值的时间戳会自动添加。
- Cell:单元,一个列标识中的值和值对应的时间戳称作单元,使用时间戳来表示值的版本。eg:home:address:{2017080411:jiangsu,2017080412:shanghai},其中017080411:jiangsu就是一个单元,一个列标识默认保存3个单元,查询时默认返回最新的值。
- Timestamp:时间戳,值在添加时会自动添加时间戳表示值得版本。也可以指定一个不同的时间戳值。
- webtable表有contents、anchor、people三个列族。
- row key为com.cnn.www的一行数据中,contents列族下有html列标识,且有5个不同时间戳的值,值为空的单元不会占用存储空间。
- webtable的json数据表示如下
{
"com.cnn.www": {
contents: {
t6: contents:html: "<html>..."
t5: contents:html: "<html>..."
t3: contents:html: "<html>..."
}
anchor: {
t9: anchor:cnnsi.com = "CNN"
t8: anchor:my.look.ca = "CNN.com"
}
people: {}
}
"com.example.www": {
contents: {
t5: contents:html: "<html>..."
}
anchor: {}
people: {
t5: people:author: "John Doe"
}
}
}
常规
- 部署模式有standalone和Distributed。生产选择fully-distributed
- Distributed有pseudo-distributed 和 fully-distributed
- standalone模式下,zookeeper和Hmaster、HregionServer都运行在一个JVM中。
- pseudo-distributed(伪分布式):运行在一台机器上,但是zookeeper和Hmaster、HregionServer运行在单独的jvm中。
- fully-distributed:集群中有多个集群上运行zookeeper、Hmaster、HregionServer。
- 客户端有shell和Java API
- 修改配置文件需要重启,但是有一些配置参数支持动态配置
- hbase存储数据可以选择存储在本地或者hdfs。生产中选择hdfs。
- Hbase通过zookeeper来管理Hmaster,通过选举来保证集群中有一个Hmaster。
- 因为Hmaster有可能会变化(如果Hmaster挂了就会选举产生新的的Hmaster),所以客户端是直接和zookeeper来进行通信,然后获取到Hmaster