设为首页 加入收藏

TOP

大数据系列之数据库Hbase知识整理(二)Hbase架构详细描述,Hbase工作流程
2019-05-02 01:44:24 】 浏览:48
Tags:数据 系列 数据库 Hbase 知识 整理 架构 详细 描述 工作流程
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011444062/article/details/81134389

1.Hbase架构详细描述

Hbase的架构如下图所示(图片来自于网上)

在上图中,主要出现的有HMaster和HRegionServer(注意HRegionServer不止两台,后面用的省略号...表示)(其余的Hadoop和Zookeepr在之前大数据系列整理了)。在上一篇我们搭建集群启动Hbase之后,我们查看了各个主机的进程jps,发现相比之前,确实多了HMaster(s10),和HRegionServer(s10,s11,s12)两个进程,其中我们在hbase/conf/regionservers目录下配置了s10,s11,s12三台主机,因此在开启Hbase的时候这三个主机会多出HRegionServer的进程,而我们把Hadoop的namenode节点s10(由于节点只有3台,所以为了演示效果把s10也配成了HRegionServer,一般情况下节点够的话不需要配置s10)配成了HMaster节点,所以在启动的时候s10上多了两个进程,分别是HMaster和HRegionServer。

在Hbase集群中,这两类节点分别负责不同的任务。其关系遵从master-slave主从结构

HMaster节点主要负责

a.负责指派region给RegionServer.通过zk获得task的帮助

b.处理跨RegionServerregion的负载均衡问题。

c.从繁忙服务到空闲服务器之间的数据转载。

d.通过裁定负载均衡判断集群的状态

region:区域。存储管理表。

HRegionServer节点主要负责

a.client通信

b.理数据操作

c.理它下面的所有region的读写请求,一个HRegionServer具有多个region

d.过阀值决定region size.

region size:区域的大小,每个区域都是有大小的,由hbase.hregion.max.filesize配置,默认10G,可以在webui界面进行查看,也就是说,当表的数据>10G,一个区域装不下的时候,当前表会被分割成多个,存储在不同的区域内,当然也有可能存储在不同的RegionServer的region中。

在一个Hbase集群中包含了HMaster和HRegionServer,HMaster主要来负责调控,保证Hbase集群的负载均衡,保证数据在存储的时候能够均衡存储,不至于只存在某个节点造成负载不均衡,而HRegionServer则是存放数据的节点,HRegionServer节点包含多个region用来存放管理我们生成数据的表。

2.Hbase工作流程

2.1.Hbase存储工作流程

还是上面的图示:

从这张图中,我们可以看出Hbase主要处理两种文件:一种是预写日志(Write-Ahead Log,WAL,标准的Hadoop SequenceFile),预写日志主要是为了容错,在写的过程中如果出现错误或是断电,使用WAL能够恢复。另一种是实际的数据文件。这两种文件主要由HRegionServer节点管理。在默认的情况下,HMaster也可以进行一些底层的文件操作。当存储数据到HDFS中时,用户可能注意到实际的数据文件会被切分成更小的块。也正是这一点,用户可以配置系统来更好的处理较大或较小的文件。

写入存储的流程是客户端首先会联系Zookeeper集群,还记得我们之前在大数据系列协同服务Zookeeper中说的么。ZooKeeper来协调服务,任何配置在ZooKeeper集群上的节点在开启的时候都会向zk(ZooKeeper)集群来注册信息,包括高可用HA的信息。Hbase配置在zk上,当然也会有注册信息,我们之前说过,可以在zk的客户端中进行查看,别忘了,zk数据存储的格式是:目录 数据(详细可参考前面说的大数据系列协同服务Zookeeper),

在zk的注册信息中,我们看到了Hbase集群的注册信息,并且通过get /hbase/master找到了Hbase的HMaster节点也就是s10。HMaster是在Hbase集群启动的时候将存放数据的区域region指定到区域服务器HRegionServer节点上,并且将这些信息写到了一张名为meta的元数据表(这张表非常非常非常的重要,里面存放了一些基本的信息,包括每个HRegionServer上的region存放的表的信息,包括表的名字,表中存放数据的开始以及结束行号等等,可以说是Hbase的核心表了,因为只有通过这张表,我们才可能实现实时快速的读写,才能找到数据在哪,以及找到要把数据写在哪个HRegionServer节点上,我们后面会详细的分析这样表)。并在zk集群上进行注册HRegionServer节点都有哪些。通过get /hbase/meta-region-server可以查看信息。

这样客户端就能够在写入存储数据的时候通过zk集群就获得了存放meta表(后面我们会详细的分析这张表,现在先把他想成一张目录,通过目录我们可以获得我们想要匹配的信息)的节点。然后通过查找meta表,客户端找到相应的HRegionServer节点上的region。一旦知道了HRegionServer节点上的region,Hbase会缓存这次查询的信息,方便当前会话的下一次查找,直接查看缓存的信息。找到HRegionServer节点之后,便于HRegionServer节点链接,HRegionServer节点负责打开region,并创建对应的HRegion实例。当HRegion被打开后,它会为每个表的HColumnFamily(列族,后面详细讲)创建一个Store实例,这些列族都是用户之前创建表时定义的。每个Store实例包含了一个或多个StoreFile实例,它们是实际数据存储文件HFile的轻量级封装,HFile通过DFS Client将数据写到DataNode。每个Store还有其对应的一个MemStore(内存缓冲区,可以避免创建很多小文件,当缓冲区满了之后,就会被刷新写到磁盘。可以关掉),一个HRegionServer节点分享一个HLog实例(为了容错,在写的过程中如果出现错误或是断电,使用日志进行恢复)。

2.2.Hbase读取工作流程

读取与存储的前期都一样,客户端通过zk获取meta(一张非常重要的表,先把他想成书本的目录),通过meta表定位到数据所在的HRegionServer节点的region上,然后实时快速的查找读取数据,找到则返回,没有找到则返回null(从MemStore开始读,如果没有匹配,则读持久化在DataNode上的数据,找到则返回,没有找到则返回null)。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hbase的高可用架构分析 下一篇HBase --- 故障恢复

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目