HBase架构详解及读写流程

目录
一、HBase存储结构详解
二、HBase写流程
三、HBase读流程

Hbase是bigtable的开源山寨版本。是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。

它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。

与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

HBase 中的表一般有这样的特点:
1、大:一个表可以有上十亿行,上百万列;
2、面向列:面向列(族)的存储和权限控制,列(族)独立检索;
3、稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

一、HBase储存结构详解

目录
1.1、HDFS
1.2、HMaster
1.3、HRegionServer
1.4、HRegion
1.4.1、Region/Store/StoreFile/Hfile之间的关系


从上面的架构图可以看出HBase是建立在hadoop之上的,HBase底层依赖于HDFS。HBase有3个重要的组件:Zookeeper、HMaster、HRegionServer。

Zookeeper为整个HBase集群提供协助的服务,HMaster主要用于监控和操作集群的所有RegionServer。RegionServer主要用于服务和管理分区(Regions)

1.1、HDFS

HBase底层依赖于HDFS的

1.2、HMaster

HMaster是HBase集群架构中的主节点,通常一个HBase集群存在多个HMaster节点,其中一个为Active Master,其余为Backup Master。

Hbase每时每刻只有一个HMaster主服务器程序在运行,HMaster将region分配给HRegionServer,协调HRegionServer的负载并维护集群的状态。Hmaster不会对外提供数据服务,而是由HRegionServer负责所有regions的读写请求及操作。

由于HMaster只维护表和region的元数据,负责Region的分配及数据库的创建和删除等操作而不参与数据的输入/输出过程,HMaster失效仅仅会导致所有的元数据无法被修改,但表的数据读/写还是可以正常进行的。
备注:region,HRegionServer职责与功能下面内容中会讲解

1.2.1HMaster的作用:

A、调控Region server的工作
为Region server分配region,
负责HRegionServer的负载均衡,,
监控集群中的Region server的工作状态, 发现失效的HRegionServer并重新分配其上的Hregion(通过监听zookeeper对于ephemeral node状态的通知)。
备注:
HRegion,习惯把它称为region,表的意思
HRegionServer,习惯把它称为Region server,HRegionServer是HBase集群架构中的从节点

B、管理数据库
提供创建,删除或者更新表格的接口。

1.3、HRegionServer

HRegionServer是HBase集群架构中的从节点,HBase中的表是根据row key的值水平分割成所谓的region的。一个region包含表中所有row key位于region的起始键值和结束键值之间的行。

集群中负责管理Region的结点叫做Region server。Region server负责数据的读写。每一个Region server大约可以管理1000个region。
备注:HRegionServer,习惯把它称为Region server,HRegionServer是HBase集群架构中的从节点。(一些文章写的是Region server、一些写的是HRegionServer,两个意思都是一样的)

1.3.1、HRegionServer由如下几个部分组成
一个HRegionServer会有多个HRegion和一个HLog。
HLog:预写入日志,防止内存中数据丢失
HRegion:表,一个HRegionServer可以维护多个HRegion(习惯称为一个Region Server可以维护多个Region)

1.3.2、HRegionServer的职责
维护HMaster分配给它的HRegion,处理对这些HRegion的IO请求,也就是说客户端直接和HRegionServer打交道。

参考文章:HBase深入分析之RegionServerhttps

1.4、HRegion

概述

Region是HBase数据管理的基本单位,每个HRegion由多个Store构成,每个Store保存一个列族(Columns Family),表有几个列族,则有几个Store,每个Store由一个MemStore和多个StoreFile组成,MemStore是Store在内存中的内容,写到文件后就是StoreFile,StoreFile底层是以HFile的格式保存。
Region相当于数据库中的表

1.4.1、Region/Store/StoreFile/Hfile之间的关系

以下内容转载自文章:Hbase中Region/Store/StoreFile/Hfile之间的关系 ,这篇文章写的超级好,担心原文删除,将文章内容摘录到本篇文章。

1.4.1.1、 Region

table在行的方向上分隔为多个Region。Region是HBase中分布式存储和负载均衡的最小单元,即不同的region可以分别在不同的Region Server上,但同一个Region是不会拆分到多个server上。

Region按大小分隔,表中每一行只能属于一个region。随着数据不断插入表,region不断增大,当region的某个列族达到一个阈值(默认256M)时就会分成两个新的region。

1.4.1.2、 Store

每一个region有一个或多个store组成,至少是一个store,hbase会把一起访问的数据放在一个store里面,即为每个ColumnFamily建一个store(即有几个ColumnFamily,也就有几个Store)。一个Store由一个memStore和0或多个StoreFile组成。

HBase以store的大小来判断是否需要切分region。
store的数据存储在两个地方MemStore和StoreFile

1.4.1.3、 MemStore

写缓存,memStore 是放在内存里的。由于 HFile 中的数据要求是有序的,所以数据是先存储在 MemStore 中,排好序后,等到达刷写时机才会刷写到 HFile(当memStore的大小达到一个阀值【默认64MB】时,memStore会被flush到文件),每次刷写都会形成一个新的 HFile。

1.4.1.4、StoreFile

memStore内存中的数据写到文件后就是StoreFile(即memstore的每次flush操作都会生成一个新的StoreFile),StoreFile底层是以HFile的格式保存。

1.4.1.5、HFile

HFile是HBase中KeyValue数据的存储格式,是hadoop的二进制格式文件。一个StoreFile对应着一个HFile。而HFile是存储在HDFS之上的。

二、HBase写流程

1、客户端先访问zookeeper,获取Meta表位于那个region server
2、访问Meta表对应的region server服务器,根据请求的信息(namespace:table/rowkey),在meta表中查询出目标数据位于哪个region server的哪个region中。
并将该表的region信息以及meta表的位置信息缓存到客户端的meta cache,方便下次访问。
3、与目标数据的region server进行通讯
4、将数据写入到WAL中
5、将数据写入到对应的memstore中,
6、向客户端发送写入成功的信息
7、等达到memstore的刷写时机后,将数据刷写到HFILE中

参考文章:查看hbase:meta 表位于哪个 Region Server

三、HBase读流程

1、Client客户端先访问zookeeper,获取 hbase:meta 表位于哪个Region Server
2、访问hbase:meta 表对应的region server服务器,根据请求的信息(namespace,table,rowkey),查询出目标表位于哪个Region Server中的哪个region。
并将该表的region信息,以及meta表的位置信息缓存在客户端的缓存中,以便下次访问。
3、与目标表所在的region server 进行通讯
4、分别在Block Cache(读缓存)MemStore和 Store File查询目标数据,并将查到的数据进行合并,此处所有数据是指同一条数据的不同版本(time stamp)或者不同的类型(Put/Delete)
5、 将从文件中查询到的数据块缓存到block cache
6、 将合并后的数据返回给客户端

你可能感兴趣的:(HBase架构详解及读写流程)