由于最近要开始深入的学习一下hbase,所以,先大概了解了hbase的基本架构,在此简单的记录一下。

Hbase的逻辑视图

Hbase的物理存储

HRegion

  • Table中所有行都按照row key的字典序排列。
  • Table在行的方向上分割为多个HRegion。
  • HRegion按大小分割的,每个表开始只有一个HRegion,随着数据增多,HRegion不断增大,当增大到一个阀值的时候,HRegion就会等分会两个新的HRegion,之后会有越来越多的Region。
  • HRegion是Hbase中分布式存储和负载均衡的最小单元,不同HRegion分布到不同HRegionServer上。

Store

  • HRegion虽然是分布式存储的最小单元,但并不是存储的最小单元。
  • HRegion由一个或者多个Store组成,每个Store保存一个columns family。 所以,每个column family存储在HDFS上的一个单独文件中,空值不会被保存。
  • 每个HRtrore又由一个MemStore和0至多个StoreFile组成,StoreFile包含HFile。
  • MemStore存储在内存中,StoreFile存储在HDFS上。

Hbase基本组件

Client

  • 包含访问HBase的接口,并维护cache来加快对HBase的访问,比如HRegion的位置信息。

Master

  • 为HRegionServer分配HRegion:比如在HRegion split时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上
  • 负责HRegionServer的负载均衡
  • 发现失效的HRegionServer并重新分配其上的HRegion
  • 管理用户对table的增删改查操作
  • 管理namespace和table的元数据
  • 权限控制(ACL)

HRegionServer

  • HRegionServer维护HRegion,处理对这些HRegion的IO请求
  • 存放和管理本地Hregion
  • 读写HDFS,管理Table中的数据 HRegionserver负责切分在运行过程中变得过大的Hregion
  • Client直接通过HRegionServer读写数据(从HMaster中获取元数据,找到RowKey所在的HRegion/HRegionServer后)

Zookeeper

  • 通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册
  • 存贮所有Region的寻址入口
  • 实时监控Region server的上线和下线信息。并实时通知给Master
  • 存储HBase的schema和table元数据

Zookeeper的引入使得Master不再是单点故障

上图清晰的表达了HMaster和NameNode都支持多个热备份,使用ZooKeeper来做协调。

  • ZooKeeper一般由三台机器组成一个集群,内部使用PAXOS算法支持三台Server中的一台宕机,也有使用五台机器的,此时则可以支持同时两台宕机,既少于半数的宕机。
  • 然而随着机器的增加,它的性能也会下降。
  • RegionServer和DataNode一般会放在相同的Server上实现数据的本地化。

协同工作

  • HBase Client通过RPC方式和HMaster、HRegionServer通信。
  • 一个HRegionServer可以存放1000个HRegion。
  • 底层Table数据存储于HDFS中,而HRegion所处理的数据尽量和数据所在的DataNode在一起,实现数据的本地化。
  • 数据本地化并不是总能实现,比如在HRegion移动(如因Split)时,需要等下一次Compact才能继续回到本地化。

Hbase的数据恢复

HLog

  • 每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类。
  • 在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中。
  • HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。

恢复过程

  • 当HRegionServer意外终止后,HMaster会通过Zookeeper感知到。
  • HMaster首先会处理遗留的HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下。
  • 然后再将失效的region重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理。
  • 因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。
  • 示意图:

Hbase的容错

HRegionServer

  • HRegionServer定时向Zookeeper汇报心跳。
  • 如果一旦时间内未出现心跳,HMaster将该RegionServer上的Region重新分配到其他RegionServer上。
  • 失效服务器上“预写”日志由主服务器进行分割并派送给新的HRegionServer。

HMaster

  • 当现有Hmaster出现灾难无法运转,Zookeeper会重新选择一个新的Master,从而保障Master不再是单点故障。

- 无Master过程中,数据读取仍照常进行。

- 无master过程中,region切分、负载均衡等无法进行。

Zookeeper

  • Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例。
  • Region定位流程:ZooKeeper--> -ROOT-(单Region)--> .META.--> 用户表

本文只是简单介绍一下hbase系统架构,后续会详细地补充。

Hbase系统架构简述的更多相关文章

  1. HBase 系统架构及数据结构

    一.基本概念     2.1 Row Key (行键)     2.2 Column Family(列族)     2.3 Column Qualifier (列限定符)     2.4 Column ...

  2. HBase 学习之路(二)—— HBase系统架构及数据结构

    一.基本概念 一个典型的Hbase Table 表如下: 1.1 Row Key (行键) Row Key是用来检索记录的主键.想要访问HBase Table中的数据,只有以下三种方式: 通过指定的R ...

  3. HBase 系列(二)—— HBase 系统架构及数据结构

    一.基本概念 一个典型的 Hbase Table 表如下: 1.1 Row Key (行键) Row Key 是用来检索记录的主键.想要访问 HBase Table 中的数据,只有以下三种方式: 通过 ...

  4. Hbase系统架构

    HBase 系统架构 HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase是一个开源的,分布式的,多版本的,面向列 ...

  5. HBase 系统架构

    HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase是一个开源的,分布式的,多版本的,面向列的存储模型.它存储的是 ...

  6. HBase系统架构及数据结构(转)

    原文链接:Hbase系统架构及数据结构 HBase中的表一般有这样的特点: 1 大:一个表可以有上亿行,上百万列 2 面向列:面向列(族)的存储和权限控制,列(族)独立检索. 3 稀疏:对于为空(nu ...

  7. Hbase 系统架构(zhuan)

    一.系统架构 客户端连接hbase依赖于zookeeper,hbase存储依赖于hadoop client: 1.包含访问 hbase 的接口, client 维护着一些 cache(缓存) 来加快对 ...

  8. 列式存储hbase系统架构学习

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

  9. hbase基础-系统架构

    HBase 系统架构 HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase是一个开源的,分布式的,多版本的,面向列 ...

随机推荐

  1. 工作总结:mvc分层架构

    pojo:plain ordinary java object 简单无规则java对象,我个人觉得它和其他不是一个层面上的东西,VO和PO应该都属于它 po:persistant object 持久对 ...

  2. Ssh 证书验证登录

    一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器.但是,一般的密码方式登录,容易有密码被暴力破解的问题.所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 ...

  3. python itchat 微信开发

    使用itchat可以简单操作微信,进行好友和群消息的发送 安装: pip install itchat 使用: import itchat, time # 登录 itchat.auto_login(h ...

  4. 天诛进阶之D算法 #3700

    http://mp.weixin.qq.com/s/ngn98BxAOLxXPlLU8sWH_g 天诛进阶之D算法 #3700 2015-11-24 yevon_ou 水库论坛 天诛进阶之D算法 #3 ...

  5. web项目开发流程

    对于一个web项目,在实际编码之前,有一些通用的步骤来planning a website: 0.Defining the project (predr0->dr0) 对于外部项目,客户一般会发 ...

  6. javascript小练手

    1.做一个小图标在界面中通过按钮可以变大 变小 变色 变圆 <!DOCTYPE html> <html lang="en"> <head> &l ...

  7. Service Discovery in WCF 4.0 – Part 1 z

    Service Discovery in WCF 4.0 – Part 1 When designing a service oriented architecture (SOA) system, t ...

  8. Python学习---同步条件event/队列queue1223

    写在前面: 在使用这些共享API的时候,我们要注意以下几点: 在UNIX平台上,当某个进程终结之后,该进程需要被其父进程调用wait,否则进程成为僵尸进程(Zombie).所以,有必要对每个Proce ...

  9. 打通 Spark 系统运行内幕机制循环流程

    本课主题 打通 Spark 系统运行内幕机制循环流程 引言 通过 DAGScheduelr 面向整个 Job,然后划分成不同的 Stage,Stage 是从后往前划分的,执行的时候是從前往后执行的,每 ...

  10. ZT C,C++表达式求值顺序 裘老的解释。 [问题点数:300分]

    http://bbs.csdn.net/topics/370153775 [置顶] [推荐] C,C++表达式求值顺序 裘老的解释. [问题点数:300分] 最近这问题有从日经变时经的趋势,这里贴出裘 ...