一、HBase依赖和整合的框架
依赖框架:Hadoop、Zookeeper
整合框架:Phoenix、Hive
二、HBase概念
1、定义:是以hdfs为数据存储的,一种分布式、可扩展的非关系型(NoSQL)数据库,和clickhouse一样同样以列式存储,存储的方式是以(K,V)的方式存储,最大的特点就是:大,可存储十亿行,百万列
2、数据模型
HBase的设计理念依据Google的BigTbable论文。HBase数据模型的关键在于稀疏的、分布式的、持久的、多维 排序 map。其中映射map指代非关系型数据库的key-Value结构。
这几个关键词如何理解:
- 稀疏的:对比关系型数据库(如mysql)的存储方式:表格存储,在底层存储的要求是比较高的,存储时对于表格的每一行每一列都需要留出一定的存储空间,留位置就会造成存储空间的浪费,如果存储百万列数据并且有一些空的列那么关系型数据库就会很浪费空间,如果用HBase这样的非关系型数据库,因为它是稀疏的所以空的列就可以不存,极大的节省了存储空间,这也反向论证了HBase存储大的特点
- 分布式:存储海量的数据,必然是分布式存储
- 持久的:存储数据时必然是持久的,如果单纯的存储在内存中那就和数据库的设计理念背道而驰
- 多维:如果想hashmap这样的单维的kv形式存储,那对于数据库就过于单一了,多维的目的就是可以存储各种类型的数据
- 排序:无序的数据查找时就会全表遍历,为了高效的所以是以有序的方式进行存储
- map:映射,该映射由行键、列键和时间戳索引(即:key),映射中的每个值都是一个未解释(经过序列化)的字节数据(即:value)
最终HBase关于数据模型和BigTbale的对应关系如下:
HBase使用与BigTbale非常相似的数据模型。用户将数据行存储在带标签的表中。数据行具有可排序的键和任意数量的列。该表存储稀疏,因此如果用户喜欢,同一表中的行可以具有疯狂变化的列
3、Hbase逻辑结构
HBase可以用于存储多种结构的数据。
以JSON为例理解HBase的逻辑结构
{"row_key1": {"personal_info": {"name": "zhangsan","city": "北京","phone": "131********"},"office_info": {"tel": "010-1111551","address": "atguigu"}},"row_key11": {"personal_info": {"city": "上海","phone": "156********"},"office_info": {"tel": "010-1115561"}},"row_key2": { ......} }
存储数据稀疏,数据存储多维,不同的行具有不同的列。数据存储整体有序、按照RowKey的字典序排列,RowKey为Byte数组