Hbase

Hbase

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