2.2 HBase架构

Hbase架构


HBase的数据模型 链接

HBase 架构示意图

在这里插入图片描述

Client (客户端)


 - 客户端,负责发送请求到数据库
 - 
 - 客户端连接的方式有很多种
   ------ hbase shell
   ------ 类JDBC
 - 
 - 发送的请求主要包括
   ------ DDL
   ------ 数据库定义语言(表的建立,删除,添加删除列族,控制版本)

   ------ DML
   ------ 数据库操作语言(增删改)

   ------ DQL
   ------ 数据库查询语言(查询--全表扫描--基于主键--基于过滤器)
 -
 - 包含访问HBase的接口并维护cache来加快对HBase的访问
 - 
 - 内部有一个缓存区,保留上次查询的数据

HMaster 主节点

 - HBase集群的主节点
 - 
 - HMaster也可以实现高可用(active--standby)
 - 
 - 通过Zookeeper来维护主副节点的切换
   ------HMaster主备节点切换时 备用节点可以继续访问元数据信息
 -
 - 负责管理HRegionServer的空间分配 发现失效则重新分配
 - 
 - 该节点主要负责DDL言语功能实现(表结构 创建 删除 修改)
   ------表的元数据信息 → Zookeeper上面
   ------表的数据 → HRegionServer上 (理论上 实质上还是在HDFS上)
 -
 - HMaster 和 HRegionServer之间有心跳机制
 - 当HRegionServer下线的时候,
 - HMaster会将当前HRegionServer上的Region转移到其他的HRegionServer
 - 
 - HMaster只处理DDL 根本没有单点压力特别大的问题
 - (创建表的操作用的还是很少的) 即使HMaster崩了 
 - 我们依然能够对数据库进行增删改查

HRegionServer 区域服务器

 - 属于HBase具体数据的管理者

 - 会实时的和HMaster保持心跳,汇报当前节点的信息
 - 
 - 当接收到Hmaster命令创建表的时候,分配一个Region对应一张表
 - 
 - 当客户端发送DML和DQL操作的时候,HRegionServer负责和客户端建立连接
 - 
 -- 客户端进行DDL操作时 Client会去找HMaster
 -
 -- 客户端进行DQL操作时 Client先去找Zookeeper 
 --- 之后Zookeeper会告诉客户端去找哪个ResionServer 
 --- 接着去找到对应Resion 从Resion里找到对应消息 Store StoreFile
 --- 查找时默认先去MemStore里去找 可能此时有些消息还没有被写到硬盘里
 --- MemStore找不到再去StoreFile里找
 -
 - Client虽然先询问Zookeeper但是是直接与ResionServer建立连接
 - 
 - 虽然增删改查业务比较多 但是ResionServer也比较多 所以压力并不大
 -
 - 当意外关闭的时候,当前节点的Region会被其它 HRegionServer管理
 - 
 - 维护Region 处理Region的IO请求 负责切分运行的过大的Region

Zookeeper 分布式协调服务

 - 监督HMaster的主备健康状况 保证只有一个活跃的Master
 - 
 - 监督HRegionServer的健康状况(上线,下线)
 - 
 - 保留表 HBase HMaster 的元数据信息
 - 
 - 保留Region和RegionServer的映射关系

Region 区域

 - 一个Region只属于一张表
 - 
 - 但是一张表后期有可能有多个Region
   ------因为随着时间的推移,Region会越来越大
   ------这时会设置一个阈值(10G)
   ------当Region达到10G的时候会被平分(逻辑上的平分,会尽量保证数据的完整性)
   ------会将切分后的其中一个Region转移到其他的HRegionServer上管理 这里无需担心数据转移 因为实际数据都在HDFS上
 -
 - 为了防止前期数据的处理都集中在一个HRegionServer,我们可以根据自己的业务进行预分区

Store 存储库

 - 一个region由多个store组成,一个store对应一个CF(列族)
 - 
 - Store负责管理当前列族的数据
 - 
 - store包括位于内存中的memstore和位于磁盘的storefile
   ------1个memstore 和 多个storefile
 - 
 - 写操作先写入memstore,当memstore中的数据达到某个阈值(128M),
 - HRegionServer会启动flashcache进程写入storefile,
 - 每次写入形成单独的一个storefile 存储到HDFS上(hfile)
 - 
 - 当storefile文件的数量增长到一定阈值后,HFile中会存放大量的失效数据(删除,修改)
 - 系统会进行合并(minor、major compaction),
 - 在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile
 - 
 - 当一个region所有storefile的大小和数量超过一定阈值后,
 - 会把当前的region分割为两个,
 - 并由hmaster分配到相应的regionserver服务器,实现负载均衡
 - 
 - 客户端检索数据 先到memstore中找 找不到再到storefile中找

HLog(WaL-Log)

 - WAL:Write Ahead Log (WAL-预写日志机制) 许多数据库用于实现原子事务的一种机制
 - 
 - HLog是分布式文件系统上的一个文件,用于存储新的还未被持久化存储的数据,它被用来做故障恢复。
 -
 - HLog文件就是一个普通的Hadoop Sequence File,
 - Sequence File 的Key是HLogKey对象,
 - HLogKey中记录了写入数据的归属信息,
 - 除了table和region名字外,同时还包括 sequence number和timestamp,
 - timestamp是” 写入时间”,sequence number的起始值为0,
 - 或者是最近一次存入文件系统中sequence number
 -
 - HLog SequeceFile的Value是HBase的KeyValue对象,即对应HFile中的KeyValue
 - 
 - 日志直接存放到HDFS上,写入的数据就是
   ------当前的日志序列号(Sequence------本次的操作
   
 - 当memStore达到阈值的时候开始写出到文件之后,会在日志中对应的位置标识一个检查点(存档点)
 - 
 - 一个HRegionServer只有一个Log文档

在这里插入图片描述
在这里插入图片描述

HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的 HRegion server上。


HRegion由一个或者多个Store组成,每个store保存一个columns family。


每个Strore又由一个memStore和0至多个StoreFile组成。如图:StoreFile以HFile格式保存在HDFS上



HFile分为六个部分:

Data Block 段–保存表中的数据,这部分可以被压缩

Meta Block 段 (可选的)–保存用户自定义的kv对,可以被压缩。

File Info 段–Hfile的元信息,不被压缩,用户也可以在这一部分添加自己的元信息。

Data Block Index 段–Data Block的索引。每条索引的key是被索引的block的第一条记录的key。

Meta Block Index段 (可选的)–Meta Block的索引。

Trailer–这一段是定长的。保存了每一段的偏移量,读取一个HFile时,会首先 读取Trailer,
  Trailer保存了每个段的起始位置(段的Magic Number用来做安全check),
  然后,DataBlock Index会被读取到内存中,这样,当检索某个key时,
  不需要扫描整个HFile,而只需从内存中找到key所在的block,
  通过一次磁盘io将整个 block读取到内存中,再找到需要的key。
  DataBlock Index采用LRU机制淘汰。

HLog(WAL log)

WAL 意为Write ahead log(http://en.wikipedia.org/wiki/Write-ahead_logging),
  类似mysql中的binlog,用来 做灾难恢复只用,Hlog记录数据的所有变更,一旦数据修改,
  就可以从log中进行恢复。

每个Region Server维护一个Hlog,而不是每个Region一个。
这样不同region(来自不同table)的日志会混在一起,这样做的目的是不断追加单个文件相
对于同时写多个文件而言,可以减少磁盘寻址次数,因此可以提高对table的写性能。带来的
麻烦是,如果一台region server下线,为了恢复其上的region,需要将region server
上的log进行拆分,然后分发到其它region server上进行恢复。

HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是HLogKey对象,
HLogKey中记录了写入数据的归属信息,除了table和region名字外,同时还包括 sequence number
和timestamp,timestamp是”写入时间”,sequence number的起始值为0,或者是最近一次存入
文件系统中sequence number。HLog Sequece File的Value是HBase的KeyValue对象,即
对应HFile中的KeyValue,可参见上文描述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值