HBase是Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库 LSMTree
利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务。
从技术上讲,HBase实际上更像是“数据存储”而不是“数据库”,因为它缺少RDBMS中的许多功能,例如字段型列,二级索引,触发器和高级查询语言等。
主要用来存储非结构化和半结构化的松散数据(列式存储的NoSQL 数据库)
NoSQL 数据库:
redis,mongoDB
memcached,CouchDB
hbase Cassandra
HBase的特点是:
目录表hbase:meta作为HBase表存在,并从HBase shell的list命令中过滤掉,但实际上是一个表,就像任何其他表一样。
hbase:meta
hbase:meta表(以前称为.META.),保有系统中所有region的列表。hbase:meta存储在zookeeper中。
表结构如下:
key:
region的key,结构为:[table],[region start key],[region id]
values:
info:regioninfo(当前region序列化的HRegionInfo实例)
info:server(包含当前region的RegionServer的server:port)
info:serverstartcode(包含当前region的RegionServer进程的开始时间)
当表正在拆分时,将创建另外两列,称为info:splitA和info:splitB。 这些列代表两个子region。 这些列的值也是序列化的HRegionInfo实例。区域分割后,将删除此行。
空键用于表示表开始和表结束。具有空开始键的region是表中的第一个region。如果某个region同时具有空开始和空结束键,则它是表中唯一的region。
启动顺序
首先,在zookeeper中查找hbase:meta的位置。其次,使用服务器和启动代码更新hbase:meta的值。
hbase:meta tablea,1-100,node2
hbase:meta tablea,101-200,node3
hbase:meta tablea,201-300,node5
hbase:meta tablea,301-400,node237
hbase:meta tablea,401-500,node24
hbase:meta tablea,501-600,node896
zookeeper->root region tablea,node3 tableb,node4
root region->meta region
meta region-> regionserver(数据)
包含访问HBase的接口并维护cache来加快对HBase的访问。HBase客户端查找关注的行范围所在的regionserver。它通过查询hbase:meta表来完成此操作。在找到所需的region之后,客户端与提供该region的RegionServer通信,而不是通过Master,并发出读取或写入请求。此信息缓存在客户端中,以便后续请求无需经过查找过程。如果Master的负载均衡器重新平衡或者由于regionserver宕机,都会重新指定该region的regionserver。客户端将重新查询目录表以确定用户region的新位置。
通过Admin进行管理功能的实现。
保证任何时候,集群中只有一个活跃master
存贮所有Region的寻址入口。 root region的地址
实时监控Region server的上线和下线信息。并实时通知Master
存储HBase的schema和table元数据
为Region server分配region
负责Region server的负载均衡
发现失效的Region server并重新分配其上的region
管理用户对table的增删改操作 不是数据的增删改
概括:管理region的分配
管理对表的操作
Region server维护region,处理对这些region的IO请求
Region server负责切分在运行过程中变得过大的region
HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据 (每条记录都有一个行键,按照行键字典序排列)
每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region(裂变)
当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Regionserver 上。
一个region由多个store组成,一个store对应一个CF(列族)
store包括位于内存中的memstore和位于磁盘的storefile。
写操作先写入memstore,当memstore中的数据达到某个阈值,hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile。
当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile
当一个region所有storefile的大小和数量超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡
客户端检索数据,先查找memstore,再blockcache(查询缓存),找不到再找storefile
HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的 HRegion server上。
HRegion由一个或者多个Store组成,每个store保存一个columns family。
每个Store又由一个memStore和0至多个StoreFile组成。如图:StoreFile以HFile格式保存在HDFS上。
hbase键值对数据库,面向列的
四个维度标志一个单元格(字段的值)
row key,列族,列标志符,版本version(按照时间戳倒序排列)