前言
传统的关系型数据库以及 Hadoop 在存储和处理大规模数据时均显现出一定的局限性。一方面,Hadoop 主要用于实现批量数据处理,且以顺序方式对数据进行访问。另一方面,在 Hadoop 中查找数据时需对整个数据集进行搜索,若要进行随机读取数据,其效率相对较低。
Hbase设计理念
HBase 是为了解决 Hadoop 的局限性而出现的。它是 BigTable 的开源 Java 版本,基于 Hadoop 集群搭建。作为一种 NoSQL 数据库,HBase 与传统的关系型数据库管理系统(RDBMS)有很大差别。它不支持 join 操作,摒弃了关系型模型,且只有一种数据类型 byte[]。HBase 可以存储非常大的表,上亿行数据、超过百万列不在话下,并且常用在实时数据处理中,原因就在于它的读写速度很快。
Hbase逻辑结构
hbase是以rowkey作为每行数据的唯一标识,用来排序和整理数据的按字典方式存储。hbase除了有行列,还多了列族,还有列名就是数据库的列名。存储是稀疏的,对于为空(nu)的列实际并不占用存储空间
- HBase 的物理存储结构。在从用户角度看到的概念视图中,如果有看起来是空的单元格,那么在实际的底层存储中,这些空单元格是不会被保存的,这样可以节省存储空间。
Hbase数据模型
- Name Space
命名空间,类似于关系型数据库的database概念,每个命名空间下有多个表。HBase两个自带的命名空间,分别是hbase和default,hbase中存放的是HBase内置的表,default 表是用户默认使用的命名空间。 - Table
类似于关系型数据库的表概念。不同的是,HBase定义表时只需要声明列族即可,不需要声明具体的列。因为数据存储时稀疏的,所有往HBase写入数据时,字段可以动态、按需
指定。因此,和关系型数据库相比,HBase能够轻松应对字段变更的场景。 - Row
HBase表中的每行数据都由一个RowKey和多个Column(列)组成,数据是按照RowKey 的字典顺序存储的,并且查询数据时只能根据RowKey进行检索,所以RowKey的设计十分重要。 - Column
HBase中的每个列都由Column Family(列族)和Column Qualifier(列限定符)进行限定,例如info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义。 - Time Stamp
用于标识数据的不同版本(version),每条数据写入时,系统会自动为其加上该字段,
其值为写入HBase的时间。 - Cell
由{rowkey, column Family:column Qualifier, timestamp} 唯一确定的单元。cell 中的数据全部是字节码形式存贮。
Hbase应用场景
- 对象存储.
不少的头条类、新闻类的的新闻、网页、图片存储在HBase之中,一些病毒公司的病毒库也是存储 - 时序数据
所有的数据都有时间顺序,可以满足时序类场景的需求. - 推荐画像.
用户画像,是一个比较大的稀疏矩阵,蚂蚁金服的风控就是构建在HBase之上 - 时空数据
主要是轨迹、气象网格之类,滴滴打车的轨迹数据主要存在HBase之中,另外在技术所有大一点的数据量的车联网企业,数据都是存在HBase之中,