欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Hbase系统架构简述

程序员文章站 2023-11-28 00:03:04
由于最近要开始深入的学习一下hbase,所以,先大概了解了hbase的基本架构,在此简单的记录一下。 Hbase的逻辑视图 Hbase的物理存储 HRegion Table中所有行都按照row key的字典序排列。 Table在行的方向上分割为多个HRegion。 HRegion按大小分割的,每个表 ......

由于最近要开始深入的学习一下hbase,所以,先大概了解了hbase的基本架构,在此简单的记录一下。

hbase的逻辑视图

Hbase系统架构简述

hbase的物理存储

hregion

  • table中所有行都按照row key的字典序排列。
  • table在行的方向上分割为多个hregion。
  • hregion按大小分割的,每个表开始只有一个hregion,随着数据增多,hregion不断增大,当增大到一个阀值的时候,hregion就会等分会两个新的hregion,之后会有越来越多的region。
  • hregion是hbase中分布式存储和负载均衡的最小单元,不同hregion分布到不同hregionserver上。

Hbase系统架构简述

 

Hbase系统架构简述

store

Hbase系统架构简述

Hbase系统架构简述

  • hregion虽然是分布式存储的最小单元,但并不是存储的最小单元。
  • hregion由一个或者多个store组成,每个store保存一个columns family。 所以,每个column family存储在hdfs上的一个单独文件中,空值不会被保存。
  • 每个hrtrore又由一个memstore和0至多个storefile组成,storefile包含hfile。
  • memstore存储在内存中,storefile存储在hdfs上。

hbase基本组件

client

  • 包含访问hbase的接口,并维护cache来加快对hbase的访问,比如hregion的位置信息。

master

  • 为hregionserver分配hregion:比如在hregion split时分配新的hregion;在hregionserver退出时迁移其内的hregion到其他hregionserver上
  • 负责hregionserver的负载均衡
  • 发现失效的hregionserver并重新分配其上的hregion
  • 管理用户对table的增删改查操作
  • 管理namespace和table的元数据
  • 权限控制(acl)

hregionserver

  • hregionserver维护hregion,处理对这些hregion的io请求
  • 存放和管理本地hregion
  • 读写hdfs,管理table中的数据 hregionserver负责切分在运行过程中变得过大的hregion
  • client直接通过hregionserver读写数据(从hmaster中获取元数据,找到rowkey所在的hregion/hregionserver后)

zookeeper

  • 通过选举,保证任何时候,集群中只有一个master,master与regionservers 启动时会向zookeeper注册
  • 存贮所有region的寻址入口
  • 实时监控region server的上线和下线信息。并实时通知给master
  • 存储hbase的schema和table元数据

zookeeper的引入使得master不再是单点故障

Hbase系统架构简述

Hbase系统架构简述

 

上图清晰的表达了hmaster和namenode都支持多个热备份,使用zookeeper来做协调。

  • zookeeper一般由三台机器组成一个集群,内部使用paxos算法支持三台server中的一台宕机,也有使用五台机器的,此时则可以支持同时两台宕机,既少于半数的宕机。
  • 然而随着机器的增加,它的性能也会下降。
  • regionserver和datanode一般会放在相同的server上实现数据的本地化。

 协同工作

  • hbase client通过rpc方式和hmaster、hregionserver通信。
  • 一个hregionserver可以存放1000个hregion。
  • 底层table数据存储于hdfs中,而hregion所处理的数据尽量和数据所在的datanode在一起,实现数据的本地化。
  • 数据本地化并不是总能实现,比如在hregion移动(如因split)时,需要等下一次compact才能继续回到本地化。

hbase的数据恢复

hlog

  • 每个hregionserver中都有一个hlog对象,hlog是一个实现write ahead log的类。
  • 在每次用户操作写入memstore的同时,也会写一份数据到hlog文件中。
  • hlog文件定期会滚动出新的,并删除旧的文件(已持久化到storefile中的数据)。

恢复过程

  • 当hregionserver意外终止后,hmaster会通过zookeeper感知到。
  • hmaster首先会处理遗留的hlog文件,将其中不同region的log数据进行拆分,分别放到相应region的目录下。
  • 然后再将失效的region重新分配,领取到这些region的hregionserver在load region的过程中,会发现有历史hlog需要处理。
  • 因此会replay hlog中的数据到memstore中,然后flush到storefiles,完成数据恢复。
  • 示意图:
  • Hbase系统架构简述

     

hbase的容错

hregionserver

  • hregionserver定时向zookeeper汇报心跳。
  • 如果一旦时间内未出现心跳,hmaster将该regionserver上的region重新分配到其他regionserver上。
  • 失效服务器上“预写”日志由主服务器进行分割并派送给新的hregionserver。

hmaster

  • 当现有hmaster出现灾难无法运转,zookeeper会重新选择一个新的master,从而保障master不再是单点故障。

- 无master过程中,数据读取仍照常进行。

- 无master过程中,region切分、负载均衡等无法进行。

zookeeper

  • zookeeper是一个可靠地服务,一般配置3或5个zookeeper实例。
  • region定位流程:zookeeper--> -root-(单region)--> .meta.--> 用户表

Hbase系统架构简述

本文只是简单介绍一下hbase系统架构,后续会详细地补充。