(一)HBase之简介
* 概念
* HBase是一个高可靠性、高性能、面向列、可伸缩、支持版本控制、稀疏的、多维度的和排序的分布式数据库。
* 高可靠性:
* (1): 在数据的写入过程中,数据首先会写到预写日志WAL(write ahead log)中,再写到memstore(内存)中,一旦
HRegionServer宕机,可以回滚WAL,重新写入数据;
* (2):数据存储时,一般是用Hadoop的hdfs作为底层存储,可以设置多个数据副本,数据会保存在本机、同一机架的不
同机器以及不同机架的机器上,利用数据的冗余存储来保证数据的安全性
* 高性能:
* 可以处理PB级别,低延迟,秒级别响应且保证一定的性能
*可伸缩:
* 可以通过横向添加廉价的pc server来扩展整个系统的存储、处理能力
* 支持版本控制:
* 保存数据操作时的时间戳,可以配置版本数量
* 稀疏的:
* HBase逻辑上是一张宽表,有许多空值,但是物理上不会存储
* 多维度:
* RDBMS的表由行和列组成,我们也叫它二维表,HBase有行健、列族、列、时间戳组成,所以也叫多维表
* 排序的:
* HBase行健和列是按照字典排序的方式存储在文件中
* 作用
*(1):弥补了Hadoop只能离线批处理的不足,能够存储小文件
*(2):解决海量的非结构化数据的高并发随机读写性能的问题
* 特性
* 通过行健检索数据,仅支持单行事务,主要用于存储非结构化和半结构化的松散数据
* 容量巨大
* HBase单表可以有百亿行、百万列,数据矩阵横向和纵向两个维度所支持的数量级非常具有弹性
* 传统数据库如Mysql、Oracle等,如果数据在亿级别,查询和写入性能将成指数级别下降,而HBase对百亿、千亿级数量不成
问题
* 如果是亿级别的列,如果不是查询整个RowKey,指定一些列是没有问题
* 面向列
* HBase的数据是按照列存储的,在查询某几个字段的时候能够大大减速读取的数据量,比如某个字段聚集存储,就更容易设计
压缩算法
* 稀疏性
* 传统数据库往往是稀疏的,存在大量空列,而且会占用空间,造成存储空间浪费,而HBase不会存储空的列,因此可以设计得
非常稀疏
* 扩展性
* HBase的扩展是热扩展,在不停止现有服务的情况下,可以随时添加或者减少节点
* 高可靠性
* HBase提供了WAL和Replication机制
* 高性能
* 底层的LSM数据结构和RowKey有序排列等架构上的独特设计,HBase具备非常高的写入性能
* Region切分、主键索引和缓存机制使得HBase在海量数据具备一定的随机读取性能,该性能对行健的查询能够达到毫秒级别
* HBase对于高并发的场景也据有很好的适应能力
* 应用场景条件
* 从需求角度、存储级别、性能、扩展、数据格式、关联关系等考虑
* 存储大量数据(PB级别数据)且保证良好的随机访问性能
* 需要很高的吞吐量、瞬间写入量很大,传统数据库不能支持或需要很高成本的场景
* 可以进行很优雅的数据扩展,动态扩展整个存储系统容量
* 数据格式无限制,支持半结构化和非结构化数据
* 业务场景简单,不需要全部的关系型数据库特性,例如交叉列、交叉表、事务、连接等
* 主要组件模块
* Client
* JAVA API
* Shell
* Thrift
* Avro
* Rest
* Zookeeper
* HMaster
* HRegionServer