一、Hbase是什么
1、Hbase是一个开源的非关系分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为Java
2、它是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统上,因此可以容错地存储海量稀疏的数据。
3、特性:
- 高可靠
- 高并发性
- 面向列
- 可伸缩
- 易构建
- 列存储
二、Hbase优缺点
1、优势
海量数据存储
快速随机访问
大量写操作的应用
2、行存储和列存储比较
行存储:
- 优点:写入一次性完成,保持数据完整性
- 缺点:数据读取过程中产生冗余数据,若有少量数据可忽略
列存储:
- 优点:读取过程,不会产生冗余数据,特别适合对数据完整性要求不高的大数据领域
- 缺点:写入效率差,保证数据完整性方面差
三、Hbase应用场景
- 互联网搜索引擎数据存储
- 海量数据写入
- 消息中心
- 内容服务系统
- 大表复杂&多维度索引
- 大批量数据读取
四、Hbase模型
1、数据模型
- RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,RowKey的设计非常重要。
- Column Family:列族,拥有一个名称(String),包含一个或者多个相关列
- Column:属于某一个column family,familyName:columnName,每条记录可动态添加
- Version Number:类型为Long,默认是系统时间戳,可以由用户自定义
- Value(cell):Byte array
它是三维有序的,可通过RowKey、column family、column qualifier查询出指定的值,存储的时候以timestamp的时间戳顺序来存储的
- {rowkey => {family = > { qualifier => version => value} }}
- a:cf1:bar:1368394583:7
- a:cf1:foo:1368394583:hello
2、物理模型
- Hbase一张表由一个或多个Hregion组成
- 记录之间按照rowkey的字典序排列
Region按大小分割的,每个表一开始只有一个Region,随着数据的不断插入表,region不断增大,当增大到一个阈值的时候,Hregion就会等分为两个新的Hregion。当table中的行不断增多,就会有越来越多的Hregion。
- 表 - > HTable
- 按Rowkey范围分的Region - > HRegion - > Region Servers
- HRegion按照列族(Column Family) - > 多个HStore
- HStore - > memstore + HFiles(均为有序的KV)
- HFile - > HDFS
HRegion是Hbase中分布式存储和负载均衡的最小单元。最小单元就表示不同HRegion可以分布在不同的HRegion server上。但一个HRegion是不会拆分到多个server上的。
HRegion虽然是分布式存储的最小单元,但并不是存储的的最小单元。
五、系统架构
Client:访问Hbase的接口,并维护Cache加速Region Server的访问
Master:负载均衡,分配Region到RegionServer
Region Server:维护Region,负责Region的IO请求
Zookeeper:保证集群中只有一个Master;存储所有Region的入口(ROOT)地址;实时监控Region Server的上下线信息,并通知Master
HMaster:负载均衡,管理和分配HRegion,管理table的元数据,权限控制
HRegionServer:存放和管理本地HRegion,读写HDFS来管理Table中的数据 一个HRegionServer可以存放1000个HRegion,尽可能保证HRegion的数据和DataNode在一起,目的为了实现本地化,如果发生HRegion的移动的时候,本地化不能够保证,如果进一步保证本地化的话,需要等待下次合并,才能继续回到本地化
六、Hbase容错
Zookeeper协调集群所有节点的共享信息,在HMaster和HRegionServer连接到Zookeeper后创建Ephemeral节点,并使用Heartbeat机制维持这个节点的存活状态,如果某个Ephemeral节点失效,则HMaster会收到通知,并做相应的处理。
除了HDFS存储信息,HBase还在ZooKeeper中存储信息,其中的znode信息:
- /hbase/table/-ROOT-,根元数据信息
- /hbase/table/.META.,元数据信息
- /hbase/master,当选的Master
- /hbase/backup-masters,备选的Master
- /hbase/rs,Region Server的信息
- /hbase/unassigned,未分配的Region
Master容错:ZooKeeper重新选一个新的Master。无Master过程中,数据读取仍照常进行;无Master过程中,region切分、负载均衡等无法进行。
Region Server容错:定时向ZooKeeper汇报心跳,如果一旦时间内未出现心跳,Master将该RegionServer上的Region重新分配到其他的Region Server上,失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer
ZooKeeper容错:ZooKeeper是一个可靠的服务,一般配置3或5个ZooKeeper实例
WAL(Write-Ahead-Log)预写日志,该机制避免数据丢失:
它是HBase的RegionServer在处理数据插入和删除的过程中用来记录操作内容的一种日志;在每次PUT、DELETE等一条记录时,首先将其数据写入到RegionServer对应的HLog文件的过程。客户端往RegionServer端提交数据的时候,会写WAL日志,只有当WAL日志写成功后,客户端才会被告诉提交数据成功,如果写WAL失败,则会告知客户端提交失败。
数据落地的过程:在一个RegionServer上所有Region共享的一个Hlog,一次数据提交先写log(WAL),然后再写memstore,每次写Log时候,首先通过HbaseClient去寻址,得到Regionserver->Region->检查数据是否存再Memstore里,如果存在直接退出,如果memstore里没有数据,写入Hlog,然后再写入Memstore,写成功返回。
七、HBase的操作
基本的单行操作:PUT,GET,DELETE