HBase 的机制里包含了许多优秀的算法,如 Region 定位、Region 分配、Region Server的上线和下线、Master 的上线和下线。在谈到这些之前,先把 HBase 的基本架构里的一些概念列在这里。

一、HBase组成

1.Client:利用 RPC 机制与 HMaster 和HRegionServer通信;

2.Zookeeper: 协调,避免 HMaster 单点问题;HMaster没有单点问题,HBase 中可以启动多个HMaster,通过 ZooKeeper 的 Master Election 机制保证总有一个 Master 在运行。

3.HMaster:负责 Table 和 Region 的管理工作;

(1) 管理用户对 Table 的 CRUD 操作;

(2) 管理 HRegionServer的负载均衡,调整Region 分布;

(3) 在 RegionSplit 后,负责新Region 分配;

(4) 在 HRegionServer停机后,负责失效 HRegionServer 上的Region 迁移;

4.HRegionServer:HBase 最核心模块,响应用户IO请求,向 HDFS 中读写数据;

HRegionServer 内部管理了一系列 HRegion对象,每个 HRegion 对应 Table 中的一个Region,HRegion 由多个 HStore 组成,每个 HStore 对应 Table 中的一个 Column Familiy 的存储。

HStore 是 HBase 存储的核心,其中由两部分构成,一部分是 MemStore,一部分是 StoreFile。StoreFile 文件数量增长到一定阈值后,会触发 Compact合并操作,将多个StoreFile 合并成一个 StoreFile,合并过程中会进行版本合并和数据删除。StoreFile 在完成 Compact 合并操作后,会逐步形成越来越大的 StoreFile,当单个StoreFile
大小超过一定阈值后,会触发 Split 操作,同时把当前Region 分裂成2个Region,父Region 会下线,新分裂出的2个孩子Region 会被 HMaster 分配到相应的 HRegionServer 上,使得原先1个Region 压力得以分流到2个Region 上。

二、Table 与Region

Region是 HBase集群分布数据的最小单位

Region 是部分数据,所以是所有数据的一个自己,但Region包括完整的行,所以Region 是行为单位表的一个子集。

每个Region 有三个主要要素:

    • 它所属于哪张表
    • 它所包含的的第一行(第一个Region 没有首行)
    • 他所包含的最后一行(末一个Region 没有末行)

当表初写数据时,此时表只有一个Region,当随着数据的增多,Region 开始变大,等到它达到限定的阀值大小时,变化把Region 分裂为两个大小基本相同的Region,而这个阀值就是StoreFile 的设定大小(参数:hbase.hRegion.max.filesize 新版本默认10G) ,在第一次分裂Region之前,所有加载的数据都放在原始区域的那台服务器上,随着表的变大,Region
的个数也会相应的增加,而Region 是HBase集群分布数据的最小单位。

(但Region 也是由block组成,Region是属于单一的RegionServer,除非这个RegionServer 宕机,或者其它方式挂掉,再或者执行balance时,才可能会将这部分Region的信息转移到其它机器上。)

这也就是为什么 Region比较少的时候,导致Region 分配不均,总是分派到少数的节点上,读写并发效果不显著,这就是HBase 读写效率比较低的原因。

三、元数据表 .META.和 -ROOT-

HBase内部维护着两个元数据表,分别是-ROOT- 和 .META. 表。他们分别维护者当前集群所有Region 的列表、状态和位置。

(1) .META. 记录用户表的 Region 信息,可以有多个 Region,.META.会随需要被Split。

(2) -ROOT- 记录 .META. 表的 Region 信息,只有一个 Region,-ROOT-永不会被Split。

(3) ZooKeeper 中记录 -ROOT- 表的 Location,.META. 和 -ROOT- 的关系见下图。

-ROOT- 表包含.META. 表的Region 列表,因为.META. 表可能会因为超过Region 的大小而进行分裂,所以-ROOT-才会保存.META.表的Region索引,-ROOT-表是不会分裂的。而.META. 表中则包含所有用户Region(user-space Region)的列表。表中的项使用Region 名作为键。Region 名由所属的表名、Region 的起始行、创建的时间以及对其整体进行MD5 hash值。

四、Region 定位流程

算法:B+树定位,通过ZooKeeper 来查找 -ROOT-,然后是.META.,然后找到Table里的Region。

Client 访问用户数据之前需要访问 ZooKeeper,然后访问 -ROOT- 表,接着访问 .META. 表,最后才能找到用户数据的位置去访问。中间需要多次网络操作,不过 Client 端会执行 Cache 缓存。

(1) 客户端client首先连接到ZooKeeper这是就要先查找-ROOT-的位置。

(2) 然后client通过-ROOT-获取所请求行所在范围所属的.META.Region的位置。

(3) client接着查找.META.Region来获取user-space Region所在的节点和位置。

(4) 接着client就可以直接和管理者那个Region的RegionServer进行交互。

每个行操作可能要访问三次远程节点,为了节省这些代价,client会缓存他们遍历-ROOT-和.META. 的位置以及user-space Region的开始行和结束行,这样每次访问就不会再从表中去查询了,但如果变动了怎么办?却是存在这个问题,这样的话client 会出现错误,那此时Region毫无疑问是移动了,这时,client 会再次从.META.查找Region 的新位置并再次将其放入到缓存中去,周而复始。同样道理如果.META.的Region移动了,client
也才会去-ROOT-表查询.META.Region的新位置。

【HBase】HBase笔记:HBase的Region机制的更多相关文章

  1. HBase学习笔记-HBase性能研究(1)

    使用Java API与HBase集群交互时,需要构建HTable对象,使用该对象提供的方法来进行插入/删除/查询等操作.要创建HTable对象,首先要创建一个带有HBase集群信息的配置对象Confi ...

  2. Hbase 技术细节笔记(上)

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:张秀云 前言 最近在跟进Hbase的相关工作,由于之前对Hbase并不怎么了解,因此系统地学习了下Hbase,为了加深对Hbase的 ...

  3. Hbase—学习笔记(一)

    此文的目的: 1.重点理解Hbase的整体工作机制 2.熟悉编程api,能够用来写程序 1.  什么是HBASE 1.1.   概念特性 HBASE是一个数据库----可以提供数据的实时随机读写 HB ...

  4. HBase学习笔记一

    HBase简介 HBase概念 HBase的原型是谷歌的Bigtable论文 HBase是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC上搭建起大规模结构化存储集 ...

  5. HBASE学习笔记(四)

    这两天把要前几天的知识点回顾一下,接下来我会用自己对知识点的理解来写一些东西 一.知识点回顾 1.hbase集群启动:$>start-hbase.sh ===>hbase-daemon.s ...

  6. 读书笔记-HBase in Action-第二部分Advanced concepts-(2)Coprocessor

    Coprocessor是HBase 0.92.0引入的特性.使用Coprocessor.能够将一些计算逻辑下推到HBase节点,HBase由一个单纯的存储系统升级为分布式数据处理平台. Coproce ...

  7. HBASE学习笔记--概述

    定义: HBase是一个分布式的.面向列的开源数据库,HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理H ...

  8. Hbase技术笔记

    一.Hbase介绍 二.Hbase的Region介绍 三.Hbase的写逻辑介绍 四.Hbase的故障恢复 五.Hbase的拆分和合并 如下ppt所示: 下面就来针对各个部分的内容来进行详细的介绍: ...

  9. Hbase写入量大导致region过大无法split问题

    最近在线上往hbase导数据,因为hbase写入能力比较强,没有太在意写的问题.让业务方进行历史数据的导入操作,中间发现一个问题,写入速度太快,并且业务数据集中到其中一个region,这个region ...

  10. HBase之七:事务和并发控制机制原理

    作为一款优秀的非内存数据库,HBase和传统数据库一样提供了事务的概念,只是HBase的事务是行级事务,可以保证行级数据的原子性.一致性.隔离性以及持久性,即通常所说的ACID特性.为了实现事务特性, ...

随机推荐

  1. Hadoop 服务器配置的副本数量 管不了客户端

    副本数由客户端的参数dfs.replication决定(优先级: conf.set > 自定义配置文件 > jar包中的hdfs-default.xml)如果前两个都没有,就用最后一个ja ...

  2. Django-models-m2m

    在Django的orm中,如果有多对多的字段,那么他的第三张表时自己生成的,参考官方文档发现第三张表可以自己写↓: 而且第三张表好像是可以自定制的 from django.db import mode ...

  3. C# 之 集合ArrayList

    .NET Framework提供了用于数据存储和检索的专用类,这些类统称集合. 这些类提供对堆栈.队列.列表和哈希表的支持.大多数集合类实现系统的接口.以下我们主要来讲一下ArrayList.     ...

  4. dubbo 实战1

    准备:先安装zookeeper,然后进入一下步骤 服务端 1.新建 maven项目 2.pom.xml 内容如下 <?xml version="1.0" encoding=& ...

  5. 理解DOMSTRING、DOCUMENT、FORMDATA、BLOB、FILE、ARRAYBUFFER数据类型

    一.XMLHttpRequest 2.0的家臣们 我大学那会儿,一个称为Ajax的东西对前端行业造成了深远影响,不仅是JS语言,而包括前端地位.职位兴起以及工作分工等.抛开IE6浏览器不谈,其他浏览器 ...

  6. android开发——自己定义相机(Camera)开发总结

    近期这段时间我一直在开发自己定义相机.谷歌了些网上的demo.发现有非常多各种各样的问题.终于还是从API的camera类開始学习,进行改进. 以下对之前的实现进行一些总结. 官方camera API ...

  7. (转) 实现wince datagrid 上下滑屏数据浏览

    开发 基于wince 手持设备数据库应用时 由于是触摸屏 当datagrid 数据过多 往往用户烦于去控制又窄又细的上下滚动条 尤其是高分辨率的屏上 (如魅族M8系统 720×480) 而且datag ...

  8. XShell连接不了虚拟机

    本机安装好虚拟机和centeros; 使用xshell连接: linux Could not connect to '127.0.0.1' (port 22): Connection failed. ...

  9. 九度OJ 1087:约数的个数 (数字特性)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7349 解决:2306 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1000) ...

  10. Java笔记之利用反射访问或修改private成员

    对于类A.B,A是B的基类,A有一个私有成员name A.java public class A { private String name = "A"; public void ...