HBase入门
HBase概述–Hbase表特点
- 大:一个表可以有数十亿行,上百万列
- 面向列:面向列(族)的存储和权限访问,列(族)独立索引
- 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏
- 数据类型单一:HBase的数据类型都是字符串
- 无模式:每行都有一个可以排序的主键和任意多的列,列可以诶根据需要动态增加,同一张表中的不同的行可以有截然不同的列
HBase VS RDBMS
- HBase中的数据都是字符串类型
- HBase只有普通的增删改查等操作,没有表之间的关联查询
- HBase是基于列式存储的,而RDBMS是基于行式存储的
- HBase适合存储大量数据,查询效果极高
术语说明
主键
- 用来检索记录的主键
- 访问HBasw表中的行,只有三种方式
- 通过单个Row Key访问
- 通过Row Key的range
- 全表扫描
- 主键为任意字符串,最大长度为64kb,按字典顺序存储,在HBase内部保存为字节数组
列族 (Column Family )
- 列族在创建表的适合声明,一个列族可以包含多个列,列中的数据都是以二进制形式存在,没有数据类型
- 列族是一些列的集合
- 一个列族所有列成员是有着相同的前缀,比如,列courses:histor 和 courses:math都是 列族courses的成员.冒号(:)是列族的分隔符,用来区分前缀和列名
时间戳和存储单元
- HBase中通过row和columns确定的为一个存贮单元称为cell,每个cell都保存着同一份数据的多个版本
- 写入数据时,时间戳可以由HBase自动赋值(当前系统时间精确到毫秒),可以显示赋值
- 每个cell中,不同版本的数据按照时间的倒序排列
- {row,column,version}元组就是一个HBase中的一个cell
HBase HDFS目录分析
Region
- WAL是RegionServer在处理数据插入和删除的过程中用来记录操作内容的一种日志,在0.94.x叫做.logs
- 向Hbase写入数据:
- 存HLog文件,存储在HDFS上
- 存Region:
- 内存
- spill到磁盘,文件,hdfs文件
- 公式:内存 * 0.4/60
HDFS目录
- /hbase/.tmp: 临时目录,当对表做创建和删除的适合,会将表move到该目录下,然后进行操作
- /hbase/data: 核心目录,存储Hbase表的数据
- 默认情况下,目录下游两个子目录
- /hbase/data/default
- 在用户创建表的时候,没有指定namespace时,表就创建在此目录下
- /hbase/data/hbase
- 系统内部创建的表
- /hbase/data/default
- /hbase/hbase.id
- 存储的是集群的唯一的cluster id(uuid)
- /hbase/hbase.version: 集群版本号
- /hbase/oldWALs
- 对应的0.94.X版本中的.oldlogs目录
- 当/hbase/WALs目录中的logs没有用之后,会将这些logs移动到此目录下,HMaster会定期的进行清理