【每日五分钟搞定大数据】系列,HBase第三篇

聊完场景和数据模型我们来说下HBase的架构,在网上找了张比较清晰的图,我觉得这张图能说明很多问题,那这一篇我们就重点来解析下这张图

角色与职责

先介绍下上图中的几个角色和Ta们的职责:

1.HMaster

  • 为Region server分配region;
  • 负责Region server的负载均衡;
  • 发现失效的Region server并重新分配其上的region;
  • 处理schema更新请求

2.Client

Client包含访问HBase的接口,并维护cache(region的位置信息)来加快对HBase的访问

3.Zookeeper

在之前的Zookeeper篇讲过HBase和Zookeeper的联系,忘记地同学可以去翻一下。

  • HMaster的HA
  • regionserver状态信息
  • 存root表(用于记录.META.表所在的regionServer,该表只会有一个regionServer)
  • 存储HBase的schema和table元数据
  • 发现失效的Region,借助HMaster分配region

4.HRegionSever

即一台服务器,拥有一个到多个HRegion

RegionServer

图里HRegionServer里面的内容很多,大家可能会看得有点懵,我们来详细说下这个HRegionServer里面的东西。

HRegionServer 包含 (1+)个 Region

一个 HRegionServer 包含一到多个Region,而Region就是一张HBase表按一定阈值横向切割的一部分。

Region按大小分割的,每个表开始只有一个region,随着数据增多,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region;

Region是Hbase中分布式存储和负载均衡的最小单元,不同Region分布到不同RegionServer上;

Region 包含 (1+)个 Store = columns family 列族个数

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

Store 是一个抽象的概念就是一个存储,它的个数和HDFS上的存储目录个数是一致的,而一个存储目录对应的就是一个columns family列族。

Store 包含(1)个 MemStore +(0+)个 StoreFile

Store 上面说了就是一个存储,他包含了一个内存的存储和0+个文件存储,一个Store的所有文件都存在一个目录下,这个目录下的所有文件对应的是一个列族。
注意:

  • StoreFile是实际存储数据的。是HFile的轻量级包装。
  • StoreFile达到阈值个数(4)会进行合并;
  • 一个StoreFile达到阈值大小会进行分裂;
  • 分裂后由hmaster分配到不同region起到负载均衡作用(若出现hot region可以手动拆分)

上面说得可能有点抽象,我们来看具体的数据:
我们来沿用下上一篇的那个表:

如表

假设这张表有几万行,一行就代表一万行,那可能A和B可能是属于RegionA,C和D可能是属于RegionB,

RegionA和RegionB可能分布在不同的RegionServer上,

可见,RegionA有两个列族,CF1和CF2,

即它有两个Store,

即在HDFS上有两个目录分别用于存放CF1和CF2,

即CF1和CF2在内存里也分别各对应了一个MemStore

读写

这里先讲个大概,后面的文章我会每一步详细分析,比如region的分裂过程,StoreFile的合并过程,rowkey的定位详细流程等等,欢迎持续关注。

Region定位流程:

  • Zookeeper:记录了-ROOT-表的位置。
  • -ROOT-:记录.META.表所在的region列表,该表只会有一个Region;
  • .META.:根据给定的key找到RegionServer。.META.记录所有的用户空间region列表,以及RegionServer的服务器地址。

    写流程

  1. 向zookeeper发起请求,从ROOT表中获得META所在的region,再根据table,namespace,rowkey,去meta表中找到目标数据对应的region信息以及regionserver
  2. 把数据分别写到HLog和MemStore上一份
    MemStore达到一个阈值后则把数据刷成一个StoreFile文件。若MemStore中的数据有丢失,则可以总HLog上恢复
    当多个StoreFile文件达到一定的大小后,会触发Compact合并操作,合并为一个StoreFile,这里同时进行版本的合并和数据删除。
    当Compact后,逐步形成越来越大的StoreFIle后,会触发Split操作,把当前的StoreFile分成两个,这里相当于把一个大的region分割成两个region

    读流程

  3. 从zookeeper获得root表所在region位置
  4. 根据table,namespace,rowkey去root表中获得meta表所在region位置
  5. 根据table,namespace,rowkey去meta表中获得这条记录所在regionserver
  6. 首先检查请求的数据是否在Memstore,写缓存未命中的话再到读缓存(blockCache)中查找,读缓存还未命中才会到HFile文件中查找,最终返回merged的一个结果给用户
  7. client端会对数据块缓存

    数据flush过程

  8. 当memstore数据达到阈值(默认是64M),将数据刷到硬盘,将内存中的数据删除同时删除Hlog中的历史数据。
  9. 并将数据存储到hdfs中。
  10. 在hlog中做标记点。

    数据合并过程

  11. 当数据块达到4块,hmaster将数据块加载到本地,进行合并
  12. 当合并的数据超过256M,进行拆分,将拆分后的region分配给不同的hregionserver管理
  13. 当hregionser宕机后,将hregionserver上的hlog拆分,然后分配给不同的hregionserver加载,修改.META.
  14. 注意:hlog会同步到hdfs

HBase篇(3)-架构详解的更多相关文章

  1. 大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  2. Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

    转自:http://blog.csdn.net/iamdll/article/details/20998035 分类: 分布式 2014-03-11 10:31 156人阅读 评论(0) 收藏 举报 ...

  3. WeChatAPI 开源系统架构详解

    WeChatAPI 开源系统架构详解 如果使用WeChatAPI,它扮演着什么样的角色? 从图中我们可以看到主要分为3个部分: 1.业务系统 2.WeChatAPI: WeChatWebAPI,主要是 ...

  4. RESTful 架构详解

    RESTful 架构详解 分类 编程技术 1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次 ...

  5. 【菜鸟】RESTful 架构详解

    RESTful 架构详解 分类 编程技术 1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次 ...

  6. 入木三分学网络第一篇--VRRP协议详解第一篇(转)

    因为keepalived使用了VRRP协议,所有有必要熟悉一下. 虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是解决局域网中配置静态网关时,静 ...

  7. Hyperledger Fabric架构详解

    区块链开源实现HYPERLEDGER FABRIC架构详解 区块链开源实现HYPERLEDGER FABRIC架构详解 2018年5月26日 陶辉 Comments 10 Comments hyper ...

  8. 学习《深度学习与计算机视觉算法原理框架应用》《大数据架构详解从数据获取到深度学习》PDF代码

    <深度学习与计算机视觉 算法原理.框架应用>全书共13章,分为2篇,第1篇基础知识,第2篇实例精讲.用通俗易懂的文字表达公式背后的原理,实例部分提供了一些工具,很实用. <大数据架构 ...

  9. NopCommerce源码架构详解--初识高性能的开源商城系统cms

    很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从中学习很多企业系统.软件开发的规范和一些新的技术.技巧,可以快速地提高我们 ...

随机推荐

  1. wap2app(九)-- 使用mui.previewImage之后,页面a链接不能跳转

    使用Hbuilder的长按保存图片的预览图片之后,页面所有的a链接都不能跳转. 解决办法: 可以使用下面绑定tap利用js跳转,亲测有效. mui('body').on( 'tap' , 'a' , ...

  2. (网页)jQueryAJAXtimeout超时问题详解(转)

    先给大家分析下超时原因: 1.网络不通畅. 2.后台运行比较慢(服务器第一次运行时,容易出现) 超时结果:JQ中 timeout设置请求超时时间. 如果服务器响应时间超过了 设置的时间,则进入 ERR ...

  3. Using IntelliJ IDEA as the Vim Editor

    转载自https://www.jetbrains.com/help/idea/using-intellij-idea-as-the-vim-editor.html This feature is on ...

  4. The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction

    今天遇到一起关于分布式事务错误的案例,如下所示,执行SQL脚本时报错, 错误信息具体如下所示: [OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中 ...

  5. [20190321]smem的显示缺陷.txt

    [20190321]smem的显示缺陷.txt1.smem 加入-m参数显示存在缺陷,map的信息不全:# smem -tk -m -U oracle -P "oraclepeis|ora_ ...

  6. [20181225]12CR2 SQL Plan Directives.txt

    [20181225]12CR2 SQL Plan Directives.txt --//12C引入SQL PLAN Directives.12cR1版本会造成大量的动态取样,影响性能.许多人把OPTI ...

  7. 自动化测试基础篇--Selenium Xpath定位

    摘自https://www.cnblogs.com/sanzangTst/p/7458056.html 学习 什么是xpath? XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言 ...

  8. c/c++链队列

    链队列 链队列就是简化了的单链表 nodequeue.h #ifndef __NODEQUEUE__ #define __NODEQUEUE__ #include <stdio.h> #i ...

  9. 阿里云windows2012+iis8配置https

    第一步先创建一个免费的证书 步骤一:申请免费证书 步骤二:填写你的二级域 步骤三:等待审核通过,通过后,点击下载 步骤四:根据自己服务器类型,下载对应的证书,根据阿里云的安装步骤做 以下是阿里云提供的 ...

  10. #007 C语言大作业学生管理系统第四天

    第四天还差恢复已删除学生功能 对于我来说,已经开始很复杂了. 小细节太重要了,边写边出错 1 #include<stdio.h> #include<stdlib.h> #inc ...