Phoenix
HBase是一个开源的非关系型分布式数据库(NoSQL),基于谷歌的BigTable建模,是一个高可靠性、高性能、高伸缩的分布式存储系统,使用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBase最初是以Hadoop子项目的形式进行开发建设,底层依赖于HDFS组件作为其存储系统(在 HDFS 中的数据默认会有 3 份),直到2010年5月才正式成为Apache的顶级项目独立发展。
Rowkey
Hbase通过行键(Rowkey)检索数据,仅支持单行事务,单表可以有百亿行、百万列,数据矩阵横向和纵向两个维度所支持的数据量级都很有弹性。 RowKey按照字典顺序排序的,且只能存储64K的字节数据。
HBase只能在RowKey上建立索引。非RowKey的访问,只能全表扫描。
RowKey是以字典顺序由小到大的排序。
RowKey尽量散列,可以保证数据都不在一个Region上,从而避免读写的压力集中在个别Region。
RowKey的长度尽量短。
列族
Hbase把同一个列族里面的数据存储在同一个目录下,由几个文件保存;权限控制、存储以及调优都是在列族层面进行的。
timestamp时间戳
每个cell存储单元对同一份数据有多个版本(每个单元格默认有 3 个时间戳的版本数据),根据唯一的时间戳来区分每个版本间的差异,不同版本的数据按时间倒序排序,最新的数据版本在最前面。时间戳类型是64位整型。由Hbase自动赋值。
cell单元格
由行和列的坐标交叉决定。内容是未解析的字节数组。
HLog
记录操作动作,以及value值,用于容灾。
主节点HMaster
在HBase中可以启动多个HMaster,通过选举机制保证只有一个Master正常运行并提供服务。HMaster主要负责Tabel和Region的管理工作。
管理用户对Table的增、删、改、查操作
管理RegionServer的负载均衡,调整Region分布
在Region分裂后,负责新Region的分配
在RegionServer死机后,负责失效的RegionServer上的Region迁移
RegionServer
负责响应用户的I/O请求,向HDFS文件系统读写数据,是HBase最核心模块。内部管理了一系列Region。
负责切分在运行过程中变得过大的region。
Region
一个Region由多个store组成,一个store对应了Table中的一个列族的存储。可以看出每个列族其实就是一个存储单元,因为最好将共同I/O特性的列放在一个列族中,保证高效读写。
Store由两部分组成,MemStore和StoreFile。用户写入的数据首先会放入MemStore,当满了后会缓冲成一个StoreFile,当StoreFile 文件的数量增长到一定的阈值,系统会进行合并。
Hbase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据。每个表开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值时,region会等分成两个新的region(裂变)。当table的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Regionserver上。
客户端检索数据,先在memstore找,找不到再找storefile。
图中示例:表有3个列族,也就对应3个store,组成一个region,表示一个表的某个区间范围rowkey对应的记录。
客户端client
客户端使用HBase的RPC机制与HMaster和RegionServer进行通信,客户端支持java接口、Thrift、Rest等多种形式
协调服务组件ZooKeeper
行键设计:
列族的设计:
Get
get()方法默认一次取回该行全部列的数据,我们也可以限定只取回某个列族的列的数据,或者进一步限定只取回某些列的数据
Put
如果RowKey是新的表示插入,否则表示更新
Scan
与get方法类似,可以指定startRow参数来定义扫描读取HBase表的起始行键,同时可选stopRow参数来限定读取到何处停止。
Delete
删除数据。与关系型数据库的delete操作不同,HBase的Delete操作可以指定删除某个列族或者某个列,或者指定某个时间戳,删除比这个时间早的数据。
flush
强制将memstore中的数据刷到storeFile中。
1. 安装hbase后,修改数据存储目录,编辑 conf/hbase-site.xml 配置hbase.rootdir 为/Users/onlyone/software/temp/hbase
2. flush '表名'
3. hbase hfile -p -f 74ca443e934c4b4bbf6c7fa4b899d16a 解压查看存储的数据
过滤器可以根据列族、列、版本等更多的条件来对数据进行过滤,带有过滤条件的RPC查询请求会把过滤器分发到各个RegionServer中,可以降低网络传输的压力。
比较器:作为过滤器的核心组成之一,用于处理具体的比较逻辑,例如字节级的比较、字符串级的比较。
列值过滤器
键值元数据过滤器
行键过滤器
功能过滤器