HBase产生背景
HDFS: 分布式文件存储系统
特点: 吞吐量极高, 适合于进行批量数据处理工作, 随机的读写能力比较差(压根就不支持)
但是, 在实际生产环境中, 有时候数据体量比较大, 但是希望能够对数据进行随机的读写操作, 而且不能太慢了, 如何解决呢?
对于市场来说, 其实非常迫切的需要一款能够支持大规模数据存储以及能够对数据进行高效的随机读写操作, 而HBase其实就是在这样的背景下产生, 灵感来源于 google发布的一篇论文(BigTable)
1- HBase是一款NoSQL型数据库,不支持SQL,没有表关系, 无法进行Join操作,不支持事务(仅仅支持行级事务)
2- HBase是基于google发布BigTable这篇论文而产生的, 基于HDFS, 也就说, 数据最终是存储到HDFS上, 如果后续想要启动HBase, 必须先启动HDFS, 基于Java语言
3- 查询HBase的数据一般有以下几种方式:
第一种: 通过主键来检索
第二种: 通过主键的范围检索
第三种: 查询全部数据
4- 存储的以结构化数据和半结构化的数据为主
5- HBase的存储都是以字节类型存储的
6- HBase的表的特点:
大: 可以存储上十亿行的数据, 也可以拥有上百万个列
面向列的存储方式: 列 指的 列族(列簇)
稀疏性: 对于Null值, 在HBase中是不占用任何的存储空间的, 所以表可以搞的非常的稀疏
HBase的应用场景 1- 数据是否需要进行随机读写的操作
2- 数据体量是否比较大(建议TB级别以上)
3- 数据是否是比较稀疏的如果在实际生产环境中, 发现数据已经具备了以上二种的时候, 其实就可以尝试使用HBase, 如果三种都满足了, 一般都是采用HBase解决
HBase的表模型
1- rowkey: 行键, 类似于MySQL中每个表都会有主键, 同样类似于 kv类型中key
在hbase中, 数据会默认进行排序操作, 排序的规则为基于rowkey进行字典升序排序
例如: 1 3 15 2 13 25 请问, 如果按照字典升序排序, 结果是什么呢?
结果为:
1 13 15 2 25 3
规则: 先比较第一位, 如果第一位相同, 比较第二位, 没有第二位比有第二位的小, 依次类推
查询方式:
第一种: 根据rowkey查询
第二种: 根据rowkey的范围查询
第三组: 查询全表数据2- column family: 列族(列簇)
在创建表的时候, 需要指定列族信息的, 一个表 是可以有多个列族
在hbase中是基于列族管理和管理的, 一个表中建议列族不要太多了, 能少则少, 能用一个解决的, 坚决不用多个
在一个列族下可以有多个列(列限定符号), 最大支持上百万个列3- 列限定符号(列名): 一个列族下可以有多个列名, 但是一个列名只能被一个列族所管理, 列的数量可以达到上百万, 在建表的时候, 不需要指定的, 在插入数据的时候, 动态执行即可
4- timestamp(时间戳): 在hbase的表中, 每一个单元格的数据都是有时间戳的概念的, 默认 为插入数据的时间, 当然也可以人为指定
5- version(版本号): 在hbase中每一个单元格都是有版本号的概念的, 可以基于版本管理, 存储每一个单元格的历史变化信息
默认版本号为1, 表示只保留最新的版本数据6- cell(单元格): rowkey + 列族 + 列名 + 列值
注意: 在建表的时候, 必须指定两项内容: 表名 + 列族