什么是HBase:

  1. 是一个非关系型数据库(稀疏矩阵)
  1. 关系型数据库:有固定的列,每一列的数据类型明确
  2. 非结构化数据,半结构化数据。
  1. 存储的目标数据
  1. 数据量大
  2. 结构简单
  3. 基于key的快速查找能力
  4. 可以面向列进行查询
  1. 为什么要有hbase,为什么不用hdfs:
  1. 因为hdfs适用的场景是海量的数据批读写,不支持海量数据中的个别数据修改
  2. 而Hbase支持在海量数据中,修改某一个数据。
  3. Hbase的快,是相对于hdfs来说的。

数据仓库的特点

  1. 面向主题:每一种数据分析的方向都有对应的主题,主题是一个抽象的概念,主题不是固定的。
  2. 数据集成:任何一个主题的数据,最好是可以轻易的集成在一起。
  3. 非易失:用于保存历史归档数据,同时也是增量数据。
  4. 反应历史变化:通常不会删,会一直保存下去

hbase的数据结构

  1. 逻辑结构
  1. 列族:多个列的组合
  1. 在数据底层当中,各个列族之间,数据是分开存储的。
  1. 列:一个列族下有若干的列
  1. 注意:hbase的列,没有数据类型,都是string
  2. 不需要在建表时声明
  1. 行:rowkey
  1. 所有的列族,所有的列,都可以引用同一个行号,但是不强制要求各个行之间对应
  2. 可以当做索引用
  3. 按字典顺序排序的
  4. 要在hbase当中查某一行,只能通过行号来查,因为hbase是基于列数据进行查询的。但是行号是可以过滤的,行号是可以随意设置的。可以把某个常用列的值作为key的一部分,方便过滤。
  5. Hbase是有分区的,同一行数据,只会出现在一个分区当中
  6. 一个分区中有若干的Store,一个Store中保存一个列族

物理结构

  1. 物理存储结构,即在物理文件当中,hbase数据的存储格式。
  2. hbase是基于列进行查询的,任何一个字段单元格都是一个独立的数据。
  1. Rowkey
  2. 列族名
  3. 列名
  4. 时间戳
  5. 操作类型
  6. 版本号
  1. 在hbase当中没有真正意义上的update,所谓的修改和删除,是追加了一条数据,已最新的时间戳来显示。如果是删除数据,会将该数据的类型改为delete,删除的数据不会永久保留,如果没有正在进行的读写,那么就会启动删除。牺牲了一部分读的性能,换取写的性能。

hbase的shell操作

  1. 建表:create ‘[命名空间:]表名’,’列族名1’,’列族名2’……
  2. 添加/修改记录:put ‘[命名空间:]表明’,’行名’,’列族名:列名’,’值’
  3. 获取一行记录:get ‘[命名空间:]表明’,’行名’
  4. 获取记录数:count ‘[命名空间:]表明’ ---- 行数!!!
  5. 删除记录:delete ‘[命名空间:]表明’,’行名’,’列族名:列名’
  6. scan命令:
  1. 属性
  1. 查询指定列
  2. 指定行数
  3. 起始行
  4. 结束行
  5. 时间戳
  6. 版本
  1. 过滤器:
  1. 对值过滤
  2. binary等值
  3. substring包含
  4. 列前缀过滤
  5. 列明包含过滤
  6. Rowkey前缀过滤