参考博客: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. AWS EC2实例Ubuntu系统设置root用户密码并使用root/ubuntu用户登录

    参考链接:http://www.wangchao.info/1137.html  注意:链接中写的简化了,其中重启服务的命令似乎不太适用,可能是不通用,我下面描述的方式亲测可行,如有其他疑问请留言: ...

  2. interface21 - web - Log4jConfigListener(Log4j加载流程)

    前言 最近打算花点时间好好看看spring的源码,然而现在Spring的源码经过迭代的版本太多了,比较庞大,看起来比较累,所以准备从最初的版本(interface21)开始入手,仅用于学习,理解其设计 ...

  3. GMap.NET实现电子围栏功能(WPF版)

    前言 GMap.NET是一个强大.免费.跨平台.开源的.NET控件.分为WPF和winform版.GMap.NET的基本知识不做过多介绍,本文主要介绍如何使用该控件实现电子围栏功能. 电子围栏主要有两 ...

  4. 【详解】Spring Security 之 SecurityContext

    前言 本文主要整理一下SecurityContext的存储方式. SecurityContext接口 顾名思义,安全上下文.即存储认证授权的相关信息,实际上就是存储"当前用户"账号 ...

  5. 微信分享JSSDK-invalid signature签名错误的解决方案

    核对官方步骤,确认签名算法. 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验. 确认con ...

  6. Nginx实战-后端应用健康检查

    严格来说,nginx是没有针对负载均衡后端节点的健康检查的,但是可以通过proxy_next_upstream来间接实现,但这个还是会把请求转发给故障服务器的,然后再转发给别的服务器,这样就浪费了一次 ...

  7. C# 微信公众号开发--准备工作

    前言 最初打算熟悉下微信开发打算用node.js开发,结果底气不足先用C#开发,先踩了踩坑. 准备工作 微信公众平台开发者文档. 这个先多看几遍. 测试公众号,申请开通后会看到微信号,appID,ap ...

  8. APiCloud学习

    端API调用 核心模块在 window.api 对象下,默认提供该模块,不需要单独引用. 扩展模块在相应的模块对象下(例如:文件系统模块在fs对象下),需要require引入(var fs = api ...

  9. angularjs通过ng-change和watch两种方式实现对表单输入改变的监控

    angularjs通过ng-change和watch两种方式实现对表单输入改变的监控 直接上练习代码 <!DOCTYPE html> <html xmlns="http:/ ...

  10. SQL SERVER GO命令循环使用实例

    通过GO  命令 来达到语句循环效果  也叫批循环 print '输出10次' 也可用来新增 语句 NOCOUNT ON 用来屏蔽 新增语句输出的影响行数 我们只看循环次数 SET NOCOUNT O ...