HBase
HBase(Hadoop Database)是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,是Google Bigtable的开源实现,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
Google Bigtable 利用 GFS 作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;
Google 运行 MapReduce来处理 Bigtable 中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;
Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。
时间戳:对应每次数据操作的时间,可由系统自动生成,也可以用户显式赋值。
HBase两种版本回收方式:
- 每个数据单元,只存储指定个数的最新版本。
- 保存指定时间长度的版本(7天)。
元素由 行键、<列族>:<限定符>、时间戳 唯一决定。
元素以字节码形式存放,没有类型之分。
一个列族一个store,
稀疏设计:一行只有几个列族有值,而不是所有的列族都有值。
Region
- 表在行方向上,按照行键范围划分成若干个Region。
- 每个表最初只有一个region,当记录增加到超过某个阈值时,就分裂成两个region。
- 物理上所有的数据都是保存在HDFS,由Region Server 提供region的管理。
- 一台物理节点只能跑一个 HRegionServer。
- 一个 HRegionServer 可以管理多个 Region 实例。
- 一个 Region 实例包括 HLog日志 和 存放数据的 store。
- HMaster作为总控节点。
- Zookeeper 负责调度。
Memregion StoreFile
- 一个region由多个store组成,每个store包含一个列族的所有数据。
- store包括位于内存的memstore和位于硬盘的store。
- 写操作(HBase只有写操作,删操作不会去掉一行,而是标记删除。)先写入memstore,当memstore中的数据量达到某个阈值,HRegionServer 会启动flashcache进程写入storefile,每次写入形成单独一个storefile。
- 当storefile文件的数量增长到一定的阈值,系统会自动合并,在合并的过程中会进行版本的合并和删除(去掉删除或过期的行)工作,形成更大的storefile。
- 当storefile大小超过一定的阈值,会把当前的region分割为两个,并由HMaster分配到相应的regionserver,实现负载均衡。
- 客户端检索数据时,先在memstore找,找不到再找storefile。