Hbase
Hbase
AlexHbase
Hbase定义
- HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为Java。
- 是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统之上,因此可以容错地存储海量稀疏的数据。
- 特性:
- 高可靠
- 高并发读写
- 面向列
- 可伸缩
- 易构建
行存储 vs 列存储
- 行存储:
- 优点:写入一次性完成,保持数据完整性
- 缺点:数据读取过程中产生冗余数据,若有少量数据可以忽略
- 列存储
- 优点:读取过程,不会产生冗余数据,特别适合对数据完整性要求不高的大数据领域
- 缺点:写入效率差,保证数据完整性方面差
优势
- 海量数据存储
- 随机快速访问
- 大量写操作的应用
Habase应用场景
- 互谅网搜索引擎数据存储
- 海量数据写入
- 消息中心
- 内容服务系统 (schema-free)
- 大表负责&所谓度索引
- 大批量数据读取
Hbase数据模型
- RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要。
- Column Family:列族,拥有一个名称(string),包含一个或者多个相关列
- Column Family下面可以细分出多个子列
- Column:属于某一个columnfamily,familyName:columnName,每条记录可动态添加
- Version Number:类型为Long,默认值是系统时间戳,可由用户自定义
- Value(Cell):Byte array
- 三维有序
- {rowkey=> {family => {qualifier => {version => value}}}}
- a:cf1:bar:1368394583:7
- a:cf1:foo:1368394261:hello
Hbase物理模型
- Hregion
- Hbase一张表由一个或多个Hregion组成
- 记录之间按照Row Key的字典序排列
- region自动分类默认分裂大小:10G,超过10G自动分割
- Hbase region:数据分布的最小单位
- Region按大小分割的,每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,Hregion就会等分会两个新的Hregion。当table中的行不断增多,就会有越来越多的Hregion。
- Hbase行级锁
- 每个region会分到一个不同region server上去
- HRegionServer:内部管理了一系列的Hregion对象
- region是对应table的一个region,逻辑感念
- Hregion是对region的封装,物理感念
表-> HTable
按RowKey范围分的Region-> HRegion->Region Servers
- Region逻辑感念,Region管理一个部分的rowKey,按rowKey可以分出很多逻辑region
- region背后有HRegion封装起来,并且由多个Hregion组成Region Servers
HRegion按列族(Column Family)->多个HStore
- 一个列族(Column Family)对应一个Hstroe,就代表一个文件
- 每一个Hregion包含该多个Hstore
HStore-> memstore+ HFiles(均为有序的KV)
- HStore数据先往内存写
- 内存区:memstore 默认128M,到达就开始往磁盘写
- 磁盘去:HFiles
HFiles-> HDFS
- HFiles就是HDFS上存储的一个真实文件
HRegion是Hbase中分布式存储和负载均衡的最小单元。
最小单元就表示不同的Hregion可以分布在不同的HRegionserver上。
但一个Hregion是不会拆分到多个server上的。
- HRegion虽然是分布式存储的最小单元,但并不是存储的最小单元。
- Region往memStore写,存够一定量后往StoreFile写
- BlockCache : 读缓存
Hbase系统架构
- Client
- 访问Hbase的接口,并维护Cache加速Region Server的访问
- Master
- 负载均衡,分配Region到RegionServer
- Region Server
- 维护Region,负责Region的IO请求
- Zookeeper
- 保证集群中只有一个Master
- 存储所有Region的入口(ROOT)地址
- 实时监控Region Server的上下线信息,并通知Master
- HMaster:
- 负载均衡:挂历和分配HRegion
- DDL:增删改 -> table,cf,namespace
- 类似namenode,管理一些元数据,table
- ACL权限管理
- HRegionServer(从):
- 管理和存放本地的HRegion
- 读写HDFS,提供IO操作
- 本地化: HRegion的数据尽量和数据所属的DataNOde在一块,但是这个本地化不能总是满足和实现
Hbase容错
- ZooKeeper协调集群所有节点的共享信息,在HMaster和HRegionServer连接到ZooKeeper后创建Ephemeral节点,并使用Heartbeat机制维持这个节点的存活状态,如果某个Ephemeral节点实效,则HMaster会收到通知,并做相应的处理。
- 除了HDFS存储信息,HBase还在Zookeeper中存储信息,其中的znode信息:
- /hbase/root-region-server ,Root region的位置
- /hbase/table/-ROOT-,根元数据信息
- /hbase/table/.META.,元数据信息
- /hbase/master,当选的Mater
- /hbase/backup-masters,备选的Master
- /hbase/rs,Region Server的信息
- /hbase/unassigned,未分配的Region
- WAL(Write-Ahead-Log)预写日志
- 是Hbase的RegionServer在处理数据插入和删除的过程中用来记录操作内容的一种日志
- 在每次Put、Delete等一条记录时,首先将其数据写入到RegionServer对应的HLog文件的过程
(2) 39:54