HBase是什么?
HBase是一个开源的非关系型分布式数据库。
为啥使用HBase?
- HBase有超强的扩展型好吞吐量
- 采用Key/Value存储方式,数据量增大,查询速度几乎不变
- 列式存储,甚至可以将几个字段分别存储到不同服务器上
总之,HBase比起其他数据库并不快,只是在数据量很大时,慢的不明显。
什么时候选择HBase?
- 单表数据量超千万,且并发还挺高。
- 不需要灵活和实时的数据,用作数据分析的需求较弱时。
什么时候选择Mysql或Oracle?
- 主要用来做数据分析(如:报表)
- 单表数据量不超过千万
HBase的服务器分类
- Master服务器
- RegionServer服务器
Master服务器用来做什么?
维护表结构信息,Master挂掉后,可以存储数据,但不能新建表了。
所有的数据操作都会经过它,如建表、删表、移动Region、合并等操作。
RegionServer服务器用来做什么?
- 存储数据,其数据存储在Hadoop的HDFS(分布式文件系统)中。
- RegionServer依赖Zookeeper,客户端连接HBase都需要先与Zookeeper通信,查询出需要连接哪个RegionServer。
什么是Zookeeper?
Zookeeper是一个轻量级分布式价格集群。用来维护节点的注册、取消、维持。
Region是什么?
Region是一段数据集合,一个Region就是多个行的集合。一张表拥有一个或多个Region。
-一个RegionServer上可以有一个或多个Region,但不能有半个(Region不可分)。
- 在HBase负载均衡的时候,可能会从一台RegionServer上把Region移动到另一台RegionServer上。
- Region是基于HDFS接口实现的。
RegionServer是什么?
是存放Region的容器,一般来说一个服务器只装一个RegionServer。
当客户端获取到RegionServer地址后,会直接从RegionServer获取数据。
存储架构
- HBase最基础的是列(Column),多个列构成行(row)。
- HBase行跟行之间的列可以完全不相同,这个行跟另一行也可以存在不同的机器上(离散的),甚至行内的列也可以存在不同的机器上。
- 一个列可以存储多个版本的单元格,单元格是数据存储的最小单元。
- 行键(rowKey)表示行的唯一性,行键不可重复,若重复存储,则会替换掉原来的值,原来的值会放到这个单元格的历史版本中。
- 每个列都有多个版本,多个版本的值存储在Cell中。
- 多个列又可以被归类为一个列族。
HBase支持什么数据格式?
支持所有能被转化为byte[]
的格式,如:Bigdecimal、boolean、ByteBuffer、double、float、int、long、short、String。
如何查询唯一一条记录?
行键:列族:列:版本号(rowKey:column:family:column:version)
- 如果不写版本号,获取到的是最后一个版本数据。
- 每一个存储语句都必须写出数据要被存储在哪一个单元格(若一行10列,存此行数据需写10行SQL)
每个列或者单元格都被赋予一个时间戳,可以由系统指定,也可以由用户指定。
列族
- 建表要指定列族。
- 数据块是否压缩都定义在列族上。
- 同一个表不同的列族可以有完全不同的属性配置,一个列族内所有的列属性值一定相同
- 列名称规范:列族:列名。如:user:username、user:password
- HBase尽量把同一列族的所有列放在同一台机器上,若想把几列放在同一个机器上,就给其加上通一个列族。
- 官方建议,一个表列族越少越好
Hadoop的HA模式
同时启动两个nameNode,一个工作,另一个处于后配机状态,让其只同步活跃机的数据,当活跃机宕机后,自动切换过去,这种模式称为HA模式。