欢迎投稿

今日深度:

HBase总结,

HBase总结,


基于HDFS,列存储的分布式数据库,可靠性高,吞吐量大,扩展性强,实时读写。

DataMode

一个表按行分区会成N个Region, 一个Region只会被一个RegionServer管理;在RS内部,一个Region又会按Column Family划分成多个Store, 一个Store包含一个内存MemStore和多个StroeFile,MemStroe达到阈值后会Flush到HDFS变成StoreFile, Store中是真实的表数据, MemStore是一个SortedMap, Map中数据为KeyValue, 排序规则由三元组rowKey,column=family+labe, ts)决定,rowkey/column升序,ts降序。

CreateTable

指定列列簇,列可动态添加

IO

IO操作时只需指定ZK地址即可,通过ZK找Root表,root表占一个region,不会split,存储了Meta表的region与regionServer的信息,是Meta表的所用,Meta表存储了region与regionserver的映射关系。

Client读写数据时通过Region范围定位到RegionServer后直接与RegionServer交互,MemStore是LSM树,更新/删除都是请求操作MemStore,时间戳标记,在内存中操作快速返回,同时会产生WAL到HDFS用于RS失败时恢复MemStore中的数据;

读取时需要同时读取MemStore和HFile中符合条件的数据后进行合并,因此一般查询是不宜扫描范围过大,目前对表支持三种方式查询:
1、single row key
2、range row key
3、all rows of table

HBASE选择CP,强一致性,同一行数据在同一台RegionServer, 仅支持单行事务。

读写KV之前先通过Metadata获取RegionServer,然后直接与RS通信

Read

Write

Compact:

数据从MemStore刷新到HFile时,为了保持简单,都是每个MemStore放一个HFile,这会带来大量小HFile文件,使得查询时效率相对较低,于是,采用数据紧凑的方式将多个小文件压缩为几个大文件。其中,minor compaction是自动将相关的小文件做一些适当的紧凑,但不彻底;而major compaction则是放在午夜跑的定时任务,将文件做最大化的紧凑。

Restore:

当RegionServer挂了,zookeeper很快就能检测到,于是将其下的region状态设置为不可用,Hmaster随即开始恢复的流程。

HMaster

RegionServer启动时会向ZK注册,HMaster通过ZK获取RegionServer列表,管理RegionServer, HBase保存了RegionServer与其管理的Region对应关系。

Table MetaData存储在Meta表中,Meta表在RegionServer上, HMater管理Meta表的变更,Table Data的操作并不需要经过HMater,因此HMaster上下线只有影响Region级别上的操作和Meda的变更,比如Region Split/Compact, Create/Drop Table等。

HMaster保存的信息可从Meta表恢复。

RegionServer

WAL: write ahead log. 听名知其意,该文件是落库前先写的日志文件,它最主要的作用是恢复数据用,类似于mysql的binlog,保存在HDFS中,所有RegionServer共用

BlockCache: regionServer的读缓存,保存使用最频繁的数据,使用LRU算法换出不需要的数据

多个Region: 每个region包含多个store,每个CF拥有一个Store

Store: 每个store包含多个StoreFile和一个Memstore

Memstore: region的写缓存,保存还未写入HFile的数据,写入数据前会先做排序,每个region每个CF都会拥有一个Memstore,这就是为什么CF不能建太多的原因

StoreFile: 真正存储keyvalue数据的文件,其保存的文件是排序过的,一个storeFile对应一个HFile,保存在HDFS中

HFile

Trailer主要记录了HFile的基本信息,各个部分的偏移和地址信息。

Data block主要存储用户的key-value数据

Bloom filter主要用来快速定位文件是否不在数据块。

KeyValue

获取表行数

注意

  • 避免后续RegionSplit影响性能可提前预分区
  • 列族和列名每个KV中都会保存,应尽量短小

Ref

http://www.importnew.com/27413.html

www.htsjk.Com true http://www.htsjk.com/hbase/41007.html NewsArticle HBase总结, 基于HDFS,列存储的分布式数据库,可靠性高,吞吐量大,扩展性强,实时读写。 DataMode 一个表按行分区会成N个Region, 一个Region只会被一个RegionServer管理;在RS内部,一个Re...
相关文章
    暂无相关文章
评论暂时关闭