1.hbase的作用和应用场景

支持海量数据的存储,虽然没有hdfs存储性能高,但是支持数据的随机读写,性能比较如下:

api hbase查询 rest hbase三种查询方式_hive


HBase仅支持三种数据读取方案:

1.根据rowkey的单行数据查询,比如:get table_name row_key

2.根据rowkey的范围数据查询

比如:scan ‘表名’ , {COLUMNS=>[‘列族’ | ‘列族:列名’ …], STARTROW=>‘起始rowkey值’ ,ENDROW=>‘结束rowkey值’, FORMATTER=>‘toString’,LIMIT=>N}

3.全局扫描,比如 scan table_name

不支持事务, 仅支持单行事务
主要存储结构化数据以及半结构化的数据
HBase中数据存储都是以字节的形式来存储的
hbase易于扩展的

HBase的表具有三大特征:

  • 1- 大: 在一个表中可以存储上十亿行的数据, 可以拥有上百万个列
  • 2- 面向列: 是基于列族进行管理操作, 基于列族进行列式存储方案
  • 3- 稀疏性: 在HBase中, 对于NULL值的数据, 不占用任何的磁盘空间的, 对效率也没有任何的影响, 所以表可以设计的非常稀疏。

HBase的应用场景:

  • 1- 数据量比较庞大的
  • 2- 数据需要具备随机读写特性
  • 3- 数据具有稀疏性特性

当以后工作中, 如果发现数据具备了以上二个及以上的特性的时候, 就可以尝试使用HBase来解决了。

2. hbase和其他软件的区别

2.1 hbase和RDBMS的区别
HBase: 具有表, 存在rowkey, 分布式存储, 不支持SQL,不支持Join, 没有表关系, 不支持事务(仅支持单行事务)
MySQL(RDBMS): 具有表, 存在主键, 单机存储,支持SQL,支持Join, 存在表关系, 支持事务。

2.2 hbase 和 HDFS的区别
HBase: 基于hadoop, 和 HDFS是一种强依赖关系, HBase的吞吐量不是特别高, 支持高效的随机读写特性。
HDFS: 具有高的吞吐量, 适合于批量数据处理, 主要应用离线OLAP, 不支持随机读写。
HBase是基于HDFS, 但是HDFS并不支持随机读写特性, 但是HBase却支持高效的随机读写特性, 两者貌似出现了一定的矛盾关系, 也就意味着HBase中必然做了一些特殊的处理工作。

2.3 hbase和hive的区别
HBase: 基于HADOOP 是一个存储数据的nosql型数据库, 延迟性比较低, 适合于接入在线业务(实时业务)
HIVE: 基于HADOOP 是一个数据仓库的工具, 延迟性较高, 适用于离线的数据处理分析操作。
HBase和hive都是基于hadoop的不同的软件, 两者之间可以共同使用, 可以使用hive集成HBase, 这样hive就可以读取hbase中数据, 从而实现统计分析操作。

3.hbase的表模型

api hbase查询 rest hbase三种查询方式_hive_02

  • 1 rowkey : 行键 , 理解为mysql中主键 , 只不过叫法不同而已
1) 在hbase中, rowkey的长度最长为64KB,但是在实际使用中, 一般长度在 0~100个字节, 常常的范围集中在 10~30区间
2) 在hbase中, 表中数据都是按照rowkey来进行排序, 不关心插入的顺序. 排序规则为 字典序的升序排列
		请将以下内容, 按照字典序的升序排序:  
			1 2 10 245 3 58 11 41 269 3478 154 
		排序结果为:
			1 10 11 154 2 245 269 3 3478 41 58 
		字典序规则: 
			先看第一位, 如果一致看第二位, 以此类推, 没有第二位的要比有第二位要小,其他位置也是一样的
3) 查询数据的方式, 主要有三种:
	基于rowkey的查询
	基于rowkey范围查询
	扫描全表数据
4) rowkey也是具备唯一性和非空性
  • 2 column family: 列族(列簇)
1) 在一个表中, 是可以有多个列族的, 但是一般建议列族越少越好, 能用一个解决, 坚决不使用多个
2) 在hbase中, 都是基于列族的管理和存储的 (是一个列式的存储方案)
3) 一个列族下, 可以有多个列名 . 可以达到上百万个
4) 在创建表的时候, 必须制定表名 和 列族名
  • 3 column qualifier: 列名(列限定符号)
1) 一个列名必然是属于某一个列族的, 在一个列族下是可以有多个列名的
2) 列名不需要在创建表的时候指定, 在插入数据的时候, 动态指定即可
  • 4 timeStamp : 时间戳
每一个单元格背后都是具有时间戳的概念的, 默认情况下, 时间戳为插入数据的时间, 当然也可以自定义
  • 5 versions: 版本号
1) 在hbase中, 对于每一个单元格, 都是可以记录其历史变更行为的, 通过设置version版本数量, 表示需要记录多少个历史版本, 默认值为 1
2) 当设置版本数量为多个的时候, 默认展示的离当前时间最近的版本的数据
  • 6 cell : 单元格
如何确定一个唯一的单元格呢?  rowkey +  列族 + 列名 + 值