什么是HBase:
- 是一个非关系型数据库(稀疏矩阵)
- 关系型数据库:有固定的列,每一列的数据类型明确
- 非结构化数据,半结构化数据。
- 存储的目标数据
- 数据量大
- 结构简单
- 基于key的快速查找能力
- 可以面向列进行查询
- 为什么要有hbase,为什么不用hdfs:
- 因为hdfs适用的场景是海量的数据批读写,不支持海量数据中的个别数据修改
- 而Hbase支持在海量数据中,修改某一个数据。
- Hbase的快,是相对于hdfs来说的。
数据仓库的特点
- 面向主题:每一种数据分析的方向都有对应的主题,主题是一个抽象的概念,主题不是固定的。
- 数据集成:任何一个主题的数据,最好是可以轻易的集成在一起。
- 非易失:用于保存历史归档数据,同时也是增量数据。
- 反应历史变化:通常不会删,会一直保存下去
hbase的数据结构
- 逻辑结构
- 列族:多个列的组合
- 在数据底层当中,各个列族之间,数据是分开存储的。
- 列:一个列族下有若干的列
- 注意:hbase的列,没有数据类型,都是string
- 不需要在建表时声明
- 行:rowkey
- 所有的列族,所有的列,都可以引用同一个行号,但是不强制要求各个行之间对应
- 可以当做索引用
- 按字典顺序排序的
- 要在hbase当中查某一行,只能通过行号来查,因为hbase是基于列数据进行查询的。但是行号是可以过滤的,行号是可以随意设置的。可以把某个常用列的值作为key的一部分,方便过滤。
- Hbase是有分区的,同一行数据,只会出现在一个分区当中
- 一个分区中有若干的Store,一个Store中保存一个列族
物理结构
- 物理存储结构,即在物理文件当中,hbase数据的存储格式。
- hbase是基于列进行查询的,任何一个字段单元格都是一个独立的数据。
- Rowkey
- 列族名
- 列名
- 时间戳
- 操作类型
- 值
- 版本号
- 在hbase当中没有真正意义上的update,所谓的修改和删除,是追加了一条数据,已最新的时间戳来显示。如果是删除数据,会将该数据的类型改为delete,删除的数据不会永久保留,如果没有正在进行的读写,那么就会启动删除。牺牲了一部分读的性能,换取写的性能。
hbase的shell操作
- 建表:create ‘[命名空间:]表名’,’列族名1’,’列族名2’……
- 添加/修改记录:put ‘[命名空间:]表明’,’行名’,’列族名:列名’,’值’
- 获取一行记录:get ‘[命名空间:]表明’,’行名’
- 获取记录数:count ‘[命名空间:]表明’ ---- 行数!!!
- 删除记录:delete ‘[命名空间:]表明’,’行名’,’列族名:列名’
- scan命令:
- 属性
- 查询指定列
- 指定行数
- 起始行
- 结束行
- 时间戳
- 版本
- 过滤器:
- 对值过滤
- binary等值
- substring包含
- 列前缀过滤
- 列明包含过滤
- Rowkey前缀过滤