参考博客:Hadoop HBase概念学习系列

参考博客:Hadoop HBase概念学习系列之HBase里的Zookeeper(二十一)

参考博客:Hadoop HBase概念学习系列之HBase里的客户端和HBase集群建立连接(详细)(十四)

参考博客:Hadoop HBase概念学习系列之META表和ROOT表(六)

参考博客:Hadoop HBase概念学习系列之HBase里的HRegion(五)

参考博客:Hadoop HBase概念学习系列之HLog(二)

参考博客:Hadoop HBase概念学习系列之HRegion服务器(三)

参考博客:Hadoop HBase概念学习系列之HMaster服务器(四)

参考博客:ZooKeeper 原理及其在 Hadoop 和 HBase 中的应用

参考博客:HBase介绍和工作原理

参考博客:深入了解HBASE架构(转)

1. 体系结构图

1.1. Hbase特性:

  • 强烈一致的读写:HBase不是“最终一致”的数据存储。这使得它非常适合于高速计数器聚合之类的任务。
  • 自动分片:HBase表通过区域分布在集群上,随着数据的增长,区域会自动分割和重新分布。
  • RegionServer自动故障转移
  • Hadoop/HDFS集成:HBase支持HDFS开箱即用的分布式文件系统。
  • MapReduce: HBase支持通过MapReduce进行大规模并行处理,将HBase用作source和sink。
  • Java客户端API: HBase支持易于使用的Java API进行编程访问。
  • Thrift/REST API: HBase还支持非java前端的Thrift 和REST。
  • Block Cache和Bloom Filters:HBase支持Block缓存和Bloom过滤器,用于高容量查询优化。
  • 操作管理:HBase提供了内置的web页面,用于操作洞察以及JMX度量

2. Zookeeper在HBase中的应用

HMaster选举与主备切换

HMaster选举与主备切换的原理和HDFS中NameNode及YARN中ResourceManager的HA原理相同。

系统容错

当HBase启动时,每个RegionServer都会到ZooKeeper的/hbase/rs节点下创建一个信息节点(下文中,我们称该节点为”rs状态节点”),例如/hbase/rs/[Hostname],同时,HMaster会对这个节点注册监听。当某个 RegionServer 挂掉的时候,ZooKeeper会因为在一段时间内无法接受其心跳(即 Session 失效),而删除掉该 RegionServer 服务器对应的 rs 状态节点。与此同时,HMaster 则会接收到 ZooKeeper 的 NodeDelete 通知,从而感知到某个节点断开,并立即开始容错工作。

HBase为什么不直接让HMaster来负责RegionServer的监控呢?如果HMaster直接通过心跳机制等来管理RegionServer的状态,随着集群越来越大,HMaster的管理负担会越来越重,另外它自身也有挂掉的可能,因此数据还需要持久化。在这种情况下,ZooKeeper就成了理想的选择。

RootRegion管理

对应HBase集群来说,数据存储的位置信息是记录在元数据region,也就是RootRegion上的。每次客户端发起新的请求,需要知道数据的位置,就会去查询RootRegion,而RootRegion自身位置则是记录在ZooKeeper上的(默认情况下,是记录在ZooKeeper的/hbase/meta-region-server节点中)。当RootRegion发生变化,比如Region的手工移动、重新负载均衡或RootRegion所在服务器发生了故障等是,就能够通过ZooKeeper来感知到这一变化并做出一系列相应的容灾措施,从而保证客户端总是能够拿到正确的RootRegion信息。

Region状态管理

HBase里的Region会经常发生变更,这些变更的原因来自于系统故障、负载均衡、配置修改、Region分裂与合并等。一旦Region发生移动,它就会经历下线(offline)和重新上线(online)的过程。

分布式SplitWAL任务管理

当某台RegionServer服务器挂掉时,由于总有一部分新写入的数据还没有持久化到HFile中,因此在迁移该RegionServer的服务时,一个重要的工作就是从WAL中恢复这部分还在内存中的数据,而这部分工作最关键的一步就是SplitWAL,即HMaster需要遍历该RegionServer服务器的WAL,并按Region切分成小块移动到新的地址下,并进行日志的回放(replay)。

由于单个RegionServer的日志量相对庞大(可能有上千个Region,上GB的日志),而用户又往往希望系统能够快速完成日志的恢复工作。因此一个可行的方案是将这个处理WAL的任务分给多台RegionServer服务器来共同处理,而这就又需要一个持久化组件来辅助HMaster完成任务的分配。当前的做法是,HMaster会在ZooKeeper上创建一个splitWAL节点(默认情况下,是/hbase/splitWAL节点),将“哪个RegionServer处理哪个Region”这样的信息以列表的形式存放到该节点上,然后由各个RegionServer服务器自行到该节点上去领取任务并在任务执行成功或失败后再更新该节点的信息,以通知HMaster继续进行后面的步骤。ZooKeeper在这里担负起了分布式集群中相互通知和信息持久化的角色。

3. Catalog Tables

目录表hbase:meta以hbase表的形式存在,并从hbase shell的列表命令中过滤出来,但实际上它和其他表一样是一个表。

hbase:meta表(以前称为.META.)保存了系统中所有的regions列表,hbase:meta的位置存储在ZooKeeper中。

4. 写流程

1、client向Hregionserver发送写请求。

2、Hregionserver将数据写到Hlog(write ahead log)。为了数据的持久化和恢复。

3、hregionserver将数据写到内存(memstore)

4、反馈client写成功。

5. 数据flush过程

1、当memstore数据达到阈值(默认是128M),将数据刷到硬盘【数据存储到hdfs中】,将内存中的数据删除,同时删除Hlog中的历史数据。

2、在hlog中做标记点。

6. Hbase的读流程

1、通过zookeeper和-ROOT- .META.表定位hregionserver。

2、数据从内存和硬盘合并后返回给client

3、数据块会缓存

7. Hmaster的职责

1、管理用户对Table表的增、删、改、查操作;

2、管理HRegion服务器的负载均衡,调整HRegion分布;

3、在HRegion分裂后,负责新HRegion的分配;

4、在HRegion服务器停机后,负责失效HRegion服务器上的HRegion迁移。

Master负责监视集群中的所有RegionServer实例,是所有元数据更改的接口。在分布式集群中,主机通常在NameNode上运行。

一个常见的列表问题涉及到Master宕机时HBase集群发生了什么。因为Hbase客户端直接与regionserver通信,所以集群仍然可以在“稳定状态”运行。此外,根据目录表,hbase:meta作为hbase表存在,并不驻留在Master中。但是,主服务器控制关键功能,如区RegionServer故障转移和完成区域分割。因此,虽然集群在没有Master的情况下仍然可以运行很短的时间,但是主服务器应该尽快重启。

在分布式集群中,主机通常在NameNode上运行。

8. Hregionserver的职责

1、HRegion Server主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBASE中最核心的模块。

2、HRegion Server管理了很多table的分区,也就是region。

9. Client请求

HBase客户端找到服务于特定行范围的RegionServers。它通过查询hbase:meta表来实现这一点。在定位所需的区域之后,客户端联系服务于该region(s)的RegionServer,而不是通过master,并发出读或写请求。这些信息缓存在客户端中,以便后续请求不需要经过查找过程。如果某个区域被主负载均衡器重新分配,或者因为某个RegionServer已死亡,客户端将重新请求目录表以确定用户region的新位置。

Hbase-2.0.0_04_Hbase原理的更多相关文章

  1. 伪分布式hbase从0.94.11版本升级stable的1.4.9版本

    Hbase从0.94.11升级到stable的1.4.9版本: 升级思路: hadoop1.1.2    hbase 0.94.11                             ↓ had ...

  2. hbase 2.0.2 分布式安装配置/jar包替换

    环境 zk: 3.4.10 hadoop 2.7.7 jdk8 hbase 2.0.2 三台已安装配置好的hadoop002,hadoop003,hadoop004 1.上传并解压hbase-2.1. ...

  3. 八年技术加持,性能提升10倍,阿里云HBase 2.0首发商用

    摘要: 早在2010年开始,阿里巴巴集团开始研究并把HBase投入生产环境使用,从最初的淘宝历史交易记录,到蚂蚁安全风控数据存储,HBase在几代阿里专家的不懈努力下,已经表现得运行更稳定.性能更高效 ...

  4. HBase存储及读写原理介绍

    一.HBase介绍及其特点 HBase是一个开源的非关系型分布式数据库,它参考了谷歌的BigTable建模,实现的编程语言为Java.它是Apache软件基金会的Hadoop项目的一部分,运行于HDF ...

  5. 【甘道夫】HBase(0.96以上版本号)过滤器Filter具体解释及实例代码

    说明: 本文參考官方Ref Guide,Developer API和众多博客.并结合实測代码编写.具体总结HBase的Filter功能,并附上每类Filter的对应代码实现. 本文尽量遵从Ref Gu ...

  6. HBase 1、HBase介绍和工作原理

    HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Google文件 ...

  7. HBase(0.96以上版本)过滤器Filter详解及实例代码

    说明: 本文参考官方Ref Guide,Developer API和众多博客,并结合实测代码编写,详细总结HBase的Filter功能,并附上每类Filter的相应代码实现. 本文尽量遵从Ref Gu ...

  8. hbase 存储结构和原理

    HBase的表结构 建表时要指定的是:表名.列族 建表语句 create 'user_info', 'base_info', 'ext_info' 意思是新建一个表,名称是user_info,包含两个 ...

  9. HBase基础架构及原理

    1. HBase框架简单介绍 HBase是一个分布式的.面向列的开源数据库,它不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式.HBas ...

随机推荐

  1. golang逃逸分析和竞争检测

    最近在线上发现一块代码逻辑在执行N次耗时波动很大1ms~800ms,最开始以为是gc的问题,对代码进行逃逸分析,看哪些变量被分配到堆上了,后来发现是并发编程时对一个切片并发的写,导致存在竞争,类似下面 ...

  2. shiro教程2(自定义Realm)

    通过shiro教程1我们发现仅仅将数据源信息定义在ini文件中与我们实际开发环境有很大不兼容,所以我们希望能够自定义Realm. 自定义Realm的实现 创建自定义Realmjava类 创建一个jav ...

  3. .net导出excle无需任何插件,直接通过一个tablehtml实现

    项目背景: 项目需要导出样式复杂的excl表格,主要是一些样式布局比较复杂 技术分析: 目前比较通用的实现方式有 1.借助微软的excle插件 2.通过NPOI插件实现 3.直接导出一个html(ta ...

  4. 菜鸟入门【ASP.NET Core】6:配置的热更新、配置的框架设计

    配置的热更新 什么是热更新:这个词听着有点熟悉,但到底是什么呢? 一般来说:创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOpti ...

  5. ios -- 成员变量、实例变量与属性的区别

      最近打开手机就会被胡歌主演的<猎场>刷屏,这剧我也一直在追,剧中的郑秋冬,因为传销入狱五年,却在狱中拜得名师孙漂亮(孙红雷),苦学HR,并学习了心理学,成功收获两样法宝.出狱后因为怕受 ...

  6. 通过swagger将API业务版本号与Gitlab代码版本号绑定

    1.调用Gitlab API获取项目commit ID 2.编辑 Swagger2.java @Configuration @EnableSwagger2 @EnableWebMvc public c ...

  7. canvas-star0.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 正则表达式+XML+反射+设计模式作业

    正则表达式+XML+反射+设计模式作业 一.    填空题 Class.forName('com.bjsxt.stumgr.entity.Student').newInstance( ); 语句的作用 ...

  9. loj#2002. 「SDOI2017」序列计数(dp 矩阵乘法)

    题意 题目链接 Sol 质数的限制并没有什么卵用,直接容斥一下:答案 = 忽略质数总的方案 - 没有质数的方案 那么直接dp,设\(f[i][j]\)表示到第i个位置,当前和为j的方案数 \(f[i ...

  10. IDEA项目搭建七——使用Feign简化消费者端操作

    一.简介 我们可以看到上一篇文章的消费者这边调用Service时比较麻烦,所以我们可以使用Feign来简化这部分操作,它底层也是使用Ribbon实现的只是Ribbon支持HTTP和TCP两种通信协议, ...