这是我参与「第四届青训营 」笔记创作活动的第9天
一、HBase适用场景
HBase概述
HBase是一个开源的NoSQL 分布式数据库,是Apache软件基金会顶级项目之一。参考Google BigTable 的设计,对稀疏表提供更高的存储空间使用率和读写效率。 HBase是一个分布式存储、数据库引擎,可以支持千万的QPS、PB级别的存储,这些都已经在生产环境验证,并且在广大的公司已经验证。特别是阿里、小米、京东、滴滴内部都有数千、上万台的HBase集群。选择一个技术的首要条件是对齐大公司,大公司会投入大量的人力去维护、改进、贡献社区。
二、HBase架构设计
HBase数据模型
- RowKey:用于唯一标识Hbase中的一条数据(记录),不可重复,按照字典顺序排序,只能存储64k的字节数据,因此一般要求设计RowKey要简短。
- TimeStamp:HBase自动赋值时间戳(也可自己实现),作为版本号,64位整型。Hbase每个cell存储单元(k:v)对同一份数据有多个版本,通过实践戳来区分版本之间的差异,按时间倒叙排序。
- ColumnFamily:列族,用于组织—系列列名,一个列族可以包含任意多个列名。每个列族的数据物理上相互独立地存储,以支持按列读取部分数据。
- 新的列族成员(列)可以随后按需、动态加入,Family下面可以有多个Qualifier,所以可以简单的理解为,HBase中的列是二级列,也就是说Family是第一级列,Qualifier是第二级列。两个是父子关系。
- Value:存储的—个具体的值。
- Cell:对应单元格具体值,是未解析的字节数组。由{rowkey, column(=+),version}唯一确定的单元。由rowkey,列族,列,版本(自动赋予的时间戳)唯一确定一个单元。Cell中的数据,没有类型,全部是字节码形式存储。
- 版本号(version):用于标识一个列内多个不同版本的数据,每个版本号对应一个值。
适用场景
- “近在线"的海量分布式KV/宽表存储,数据量级可达到PB级以上;
- 写密集型、高吞吐应用,可接受一定程度的时延抖动;
- 字典序主键索引、批量顺序扫描多行数据的场景;
- Hadoop 大数据生态友好兼容;
- 半结构化数据模型,行列稀疏的数据分布,动态增减列名;
- 敏捷平滑的水平扩展能力,快速响应数据体量、流量变化;
三、大数据支撑
HBase在大数据生态的定位
- 对TB、PB级海量数据支持强一致、近实时的读写性能,支持快速的ad-hoc分析查询任务;
- 支持字典序批量扫描大量数据,支持只读取部分列族的数据,灵活支持不同查询模式,避免读取不必要的数据;
- 存储大规模任务(例如MapReduce,Spark,Flink)的中间/最终计算结果;
- 平滑快速的水平扩展能力,能够敏捷应对大数据场景高速增长的数据体量和大规模的并发访问;
- 精细化的资源成本控制,计算层和存储层分别按需扩展,避免资源浪费。